您的位置:首页 > 编程语言 > Java开发

乱码编码问题学习小结(包括Java)

2007-07-20 15:32 567 查看
在使用java的过程中,由于平台和国际化的需要,需要处理多种文字编码,这时很多乱码问题就来了,虽然每次都测试实验最后找到解决方案,但不知所以然,所以仔细学习了一下相关东西,加上自己的实践总结。

首先请访问一篇好文章: http://www.regexlab.com/zh/encoding.htm
(字符,字节和编码,包括C++,Java相关讨论)

实践中问题以及思路:

将程序生成的html内容用getBytes("gb2312")得到字节流,用FileOutputStream写到磁盘(操作系统文件编码iso-8859-1)。按理来说,直接以字节流写出去,不会出转换的问题。但实际上用任何软件打开都是乱码。(如果操作系统文件编码gb2312不会出问题)

分析:问题在于任何软件尤其IE都根据操作系统文件编码进行了转换成自己使用的编码,所以反而出错了。

解决:用纯字节流写,即转化成iso-8859-1(唯一的和Unicode有映射单字节编码,而且从任何字节流转换都不会丢失数据,见前面推荐的文章)写到磁盘,无论操作系统是什么编码(如gb,jis等等),从磁盘读出来的数据都是纯字节流,没有丢失,其他软件再根据自己的方式转换成适当的编码就没有问题。

一个常见问题讨论:

http://topic.csdn.net/t/20051208/10/4445548.html

1,首先,我修改了xml文件的编码方式,改为“GBK”编码格式的xml;

<?xml version="1.0" encoding="GBK"?>

2, 在访问数据库的配置文件中,访问mysql的url 参数修改为:useUnicode=true&characterEncoding=GBK;

3,在我的Pageconfig的类修改取xml的xml.getBytes("ISO8859-1"));

InputStream st = new ByteArrayInputStream(xml.getBytes("ISO8859-1"));

这个我先前也曾经尝试过,但没有匹配成功;

4,需要修改mysql数据库的默认编码:

default-character-set=GBK

default-collation=GBK

5,关于以下的取值,不做任何转码;

ret.title =page.getAttributeValue("title");

6,因为我有一个专门最后生成wml页面的转码的类,将会转成utf-8格式;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: