a查对应字符表为97,再将97按对应编码规则转成二进制数存储
GBK字符集的编码规则就是GBK编码(字母1字节,汉字2字节。字母二进制0开头,汉字二进制高字节1开头)
Unicode字符集的编码规则有多种,默认编码(一个字符2字节等)和utf-8编码(字母1字节,汉字3字节,每个字节开头110 10 10)
Unicode字符集的编码规则有多种,默认编码(一个字符2字节等)和utf-8编码(字母1字节,汉字3字节,每个字节开头110 10 10)
windows中vs,idea创建的txt文件若显示以ansi(则默认为GBK)编码,以gbk解码不会乱码。手动新建的txt默认为Unicode字符集的utf-8编码,需以utf-8解码
package xuexi.文件操作.转换编码; import java.io.*; public class Main { public static void main(String[] args) throws Exception { //gbk.txt ->gbk解码 ->字符串 ->utf8编码 ->utf8.txt //1 //将字节输入流,以gbk解码成字符流,在传入字符串 InputStreamReader isr = new InputStreamReader(new FileInputStream("D:/myjava/aa/gbk.txt"),"gbk"); //包装字节输出流 成 utf-8字符输出流 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("D:/myjava/aa/utf8.txt"),"utf-8"); try(BufferedReader reader = new BufferedReader(isr); BufferedWriter writer = new BufferedWriter(osw)){ String line;//接收字符串 while((line = reader.readLine()) != null){ System.out.println(line); writer.write(line); writer.newLine(); } } //2 //将字节输入流,以gbk解码成字符流,在传入字符串 InputStreamReader isr1 = new InputStreamReader(new FileInputStream("D:/myjava/aa/gbk1.txt"),"gbk"); //不包装字节输出流,直接输出时确定编码 FileOutputStream osw1 = new FileOutputStream("D:/myjava/aa/utf81.txt"); try(BufferedReader reader1 = new BufferedReader(isr1); BufferedOutputStream writer1 = new BufferedOutputStream(osw1)){ String line1;//接收字符串 while((line1 = reader1.readLine()) != null){ System.out.println(line1); writer1.write(line1.getBytes("utf-8")); System.out.println(); } } //3 //将字节输入流,以gbk解码成字符流,在传入字符串 InputStreamReader isr2 = new InputStreamReader(new FileInputStream("D:/myjava/aa/gbk2.txt"),"gbk"); //包装字节输出流 成 utf-8字符输出流 OutputStreamWriter osw2 = new OutputStreamWriter(new FileOutputStream("D:/myjava/aa/utf82.txt"),"utf-8"); try(BufferedReader reader = new BufferedReader(isr2); BufferedWriter writer = new BufferedWriter(osw2)){ char[] chars = new char[1204]; int len; while((len = reader.read(chars)) !=-1){ writer.write(chars,0,len); } } } }