JAVA编码问题

一、编码表
1.ASCLL:美国标准信息交换码(用1个字节的7位表示)
2.ISO8859-1:拉丁码表,欧洲码表(用1字节8位表示)
3.GB2312:中国的中文编码表(2个字节表示)
4.GBK:中国的中文编码表升级,融合了更多的中文文字符号(2个字节表示)
5.Unicode: 国际标准码,融合了多种文字,所有文字和符号都用两个字节表示,Java用的就是Unicode
6.UTF-8:用1,2,3个字节表示字符。8-bit Unicode Transformation Format Unicode标准转化码,最少八位

二、在我们写程序,做开发的过程中经常在读写数据的时候会遇到乱码问题。我现在用的Eclipse的默认编码是GBK的,在读入UTF-8的文件时候会出现乱码现象。如何解决:

1.将文本文件的编码格式改一下,就是在文本文档中选择 ->文件
->另存为->GBK 或者ANSI
2.使用转换流读入写出 ,调用可以传入构造器的方法
new InputStreamReader( new FileReader("文件名"),"utf-8");

new OutputStreamWriter(new FileWriter("文件名"),"utf-8");

处理异常。你指定的编码表和文件的编码表一致。

三、出现问题的原因
以GBK字节为例:读入的时候是一个字节一个字节读入的,也就是一个八位一个八位的读入的,读入的时候文件变为字节流的形式,比如中文两个字节 : -45 -54 表示一个汉字 ,read()读入的时候返回他会用-45 -54 去GBK 中找到对应的汉字返回对应的int值,再转换显示出来。
因为字节是连续读入的查表的时候 GBK会两个字节两个字节的查,去查。
UTF-8: 可以用三个字节,两个字节,一个字节表示字符,比如
汉字用三个字节表示(如: -34 -34-22),数字用一个字节(00001111)表示, 所以UTF-8会有标志:111… 开头表示三个字节代表一个字符,读写时会向后再找两个字节凑够三个字节再去查找,同理110…10..表示两个字节代表一个字符,0…表示一个字节的字符,查表时会凑着再去查。
所以如果读入字节流为:
-34 -34-24 - 4 -4 -23
GBK 找的是:-34 -34 对应字符 ;-24 - 4对应字符 ;-4 -23对应字符三个字符。 而UTF-8 找到的可能只是-34 -34-24对应的字符和 - 4 -4 -23对应的字符两个,或其他四个五个。
因此会出现乱码问题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值