一张图说明字符集之间关系
针对于utf-8来说一下,他是unicode的一种转换格式码,他是隶属于unicode的 ,只不过呢,他是变长的unicode编码
简单说一下计算机汉字存储
我用百读搜了一下啊
按照unicode标准转换成相应的码存储,那大致是一个什么样子呢,首先计算机会对汉字进行分区处理,大致如下
每个汉字及符号用可两个字节来表示:
再来说一下,如果一个文档里面存放的汉字和英文,我们按照unicode保存或者utf-8保存,为什么英文不出现问题?我们知道上面主要解决中文的存储问题
我们看一下unicode的英文字母编码
上面的t
十六制74变成十进制就是116
然后看看ascii码对应的十进制也是一样的
也就是说 ,unicode是兼容了ascii码的127个字符的。
java中文件读取乱码问题
假设如下一个中文文本
它的内存分析如下
然后看一下我们读取代码:必须保证文件编码类型,读取类型,写入类型都一致,就不会出现乱码问题
//采用字符流来读取文本操作
public static void copyText(File srcFile,File destFile) {
InputStreamReader fr = null;
OutputStreamWriter fw = null;
try {
fr = new InputStreamReader(new FileInputStream(srcFile),"gbk");
// fw = new FileWriter(destFile);
fw = new OutputStreamWriter(new FileOutputStream(destFile),"gbk");
char[] buff = new char[1024];
int len = 0;
while((len = fr.read(buff)) != -1) {
System.out.println("读取到的长度:" + len);
fw.write(buff,0,len);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fr.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}