浏览 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函数的源码,你会发现它有默认编码的功能。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |