java中文字符转码的思考

时间:2022-02-17 07:37:03

笔者最近所做的一个程序其中一部分与一个已经存在的xml解析器相关,在解析的过程中发现很多中文值都无法正确应用(反编译xml解析器后发现需要的格式是UTF-8),需要转换字符串成UTF-8格式编码的。我在网上找过很多文章和其他资料,但是都无法解决问题。后来发现了一个方法,总算是初步解决了一些问题,现在总结一下,与大家分享.

很多文章和文档中介绍的方法: String s = new String(name.getBytes(“ISO8859_1”),” GB2312”);

这个方法 并不能正确解决中文的编码问题,稍微分析一下就知道:name是一个String,使用了getBytes(“ISO8859_1”),之后将获得一个字节数组,这个数组是与ISO8859_1编码相对应的,也就是说,再将这个字节数组用"ISO8859_1"再次组装成一个string时是能正确显示字符的。大家都知道,不同的编码实现的方法是不一样的,这里使用了iso-8859-1编码方式解开字符串成byte[],却以GB2312方式来组装,是有问题的,中文是不能正确处理的,大家可以试着用一个中英文混合的字符串来代替name,再打印一下看看结果,中文都变成了问号。

我操作的xml解析器需要的是一个输入流,先前使用StringBufferInputStream(String s)创建字节流的方法没有成功,后来我将一串字符串以UTF-8格式解开成byte[] 后输出到磁盘上保存,再次使用时就用这种文件以FileInputStream的方式送入解析器,果然都能正确了,由于此方法不支持reset(),所以我使用了new ByteArrayInputStream(stringContent.getBytes("UTF-8"))创建新的流,获得了比较好的效果。