论坛首页 编程语言技术论坛

java读取文件遇到的乱码问题(UTF-8转GBK)

浏览 5402 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-05-04  
问题:
UTF-8格式的文件,在xp环境下读入,判断有问题,通过new String(utf8_txt.getBytes(),”UTF-8”)转换存在部分文字丢失的问题,即有一部分字为??。
分析:
utf-8文件如果用字节流读入,用字节流输出,没有任何问题。但是当要处理utf-8文件时,采用字符流就涉及到了编码问题。事实上编码是一件很混乱的事。utf-8的编码更奇葩,因为它占用的byte大小可能是1字节,2字节,3字节。而其他编码也各有各的规则。但有一条规则我觉得是要明确的,转码要防止多次转换。
上面我遇到的问题其实经过了两次编码;首先是字符本身为UTF-8,其次utf8_txt.getBytes()返回了经过GBK编码的字节(默认编码),所以字节成为了经过UTF-8和GBK双重编码;当使用“UTF-8”后,直接解码,会导致出现部分字符无法解析。
解决方案:
有如下两种方法:
1.更改默认的环境编解码:启动虚拟机时可以添加配置参数-Dfile.encoding=UTF-8;
2.直接用字节流读取字符串到byte[]数组中,然后用new String(b,”UTF-8”)完成解码。
注意:千万用字符流读取,在用String.getBytes()函数转化成byte[]数组,查看getBytes函数的源码,你会发现它有默认编码的功能。
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics