Java 关于中文乱码问题的解决方案与经验 (2)
来源:互联网 发布:数控编程用什么软件好 编辑:程序博客网 时间:2024/04/19 19:18
五、我们要对Java的编译器有所了解:
我们常常没有用到encoding这个参数。其实encoding这个参数对于跨平台的操作是很重要的。如果没有指定encoding,则按照系统的默认encoding,gb平台上是gb2312,英文平台上是iso8859_1。Java的编译器实际上是调用sun.tools.Javac.main的类,对文件进行编译,这个类有compile函数中间有一个encoding的变量,-encoding的参数其实直接传给encoding变量。编译器就是根据这个变量来读取Java文件的,然后把用utf-8形式编译成class文件。例子代码:
但是我们往往忽略掉这个参数,因此这样往往会有跨平台的问题:
样例代码在中文平台上编译,生成zhclass
样例代码在英文平台上编译,输出enclass
(1) zhclass在中文平台上执行ok,但是在英文平台上不行
(2) enclass在英文平台上执行ok,但是在中文平台上不行
原因是:
(1) 在中文平台上编译后,其实str在运行态的char[]是0x4f60, 在中文平台上运行,filewriter的缺省编码是gb2312,因此chartobyteconverter会自动用调用gb2312的converter,把str转化成byte输入到fileoutputstream中,于是0xc4,0xe3放进了文件。但是如果是在英文平台下,chartobyteconverter的缺省值是8859_1, filewriter会自动调用8859_1去转化str,但是他无法解释,因此他会输出"?"
(2) 在英文平台上编译后,其实str在运行态的char[]是0x00c4 0x00e3, 在中文平台上运行,中文无法识别,因此会出现??;在英文平台上,0x00c4-->0xc4,0x00e3->0xe3,因此0xc4,0xe3被放进了文件。
六、其它原因:
设置浏览器的显示编码,如果response的数据是utf8编码,显示将是乱码,但是乱码和上述原因还不一样。
七、发生编码的地方:
1. 从数据库到Java程序 byte——〉char
2. 从Java程序到数据库 char——〉byte
3. 从文件到Java程序 byte——〉char
4. 从Java程序到文件 char——〉byte
5. 从Java程序到页面显示 char——〉byte
6. 从页面form提交数据到Java程序byte——〉char
7. 从流到Java程序byte——〉char
8. 从Java程序到流char——〉byte
可以使用配置过滤器的方法解决中文乱码的:
|
我们常常没有用到encoding这个参数。其实encoding这个参数对于跨平台的操作是很重要的。如果没有指定encoding,则按照系统的默认encoding,gb平台上是gb2312,英文平台上是iso8859_1。Java的编译器实际上是调用sun.tools.Javac.main的类,对文件进行编译,这个类有compile函数中间有一个encoding的变量,-encoding的参数其实直接传给encoding变量。编译器就是根据这个变量来读取Java文件的,然后把用utf-8形式编译成class文件。例子代码:
|
但是我们往往忽略掉这个参数,因此这样往往会有跨平台的问题:
样例代码在中文平台上编译,生成zhclass
样例代码在英文平台上编译,输出enclass
(1) zhclass在中文平台上执行ok,但是在英文平台上不行
(2) enclass在英文平台上执行ok,但是在中文平台上不行
原因是:
(1) 在中文平台上编译后,其实str在运行态的char[]是0x4f60, 在中文平台上运行,filewriter的缺省编码是gb2312,因此chartobyteconverter会自动用调用gb2312的converter,把str转化成byte输入到fileoutputstream中,于是0xc4,0xe3放进了文件。但是如果是在英文平台下,chartobyteconverter的缺省值是8859_1, filewriter会自动调用8859_1去转化str,但是他无法解释,因此他会输出"?"
(2) 在英文平台上编译后,其实str在运行态的char[]是0x00c4 0x00e3, 在中文平台上运行,中文无法识别,因此会出现??;在英文平台上,0x00c4-->0xc4,0x00e3->0xe3,因此0xc4,0xe3被放进了文件。
六、其它原因:
|
设置浏览器的显示编码,如果response的数据是utf8编码,显示将是乱码,但是乱码和上述原因还不一样。
七、发生编码的地方:
1. 从数据库到Java程序 byte——〉char
2. 从Java程序到数据库 char——〉byte
3. 从文件到Java程序 byte——〉char
4. 从Java程序到文件 char——〉byte
5. 从Java程序到页面显示 char——〉byte
6. 从页面form提交数据到Java程序byte——〉char
7. 从流到Java程序byte——〉char
8. 从Java程序到流char——〉byte
可以使用配置过滤器的方法解决中文乱码的:
|
- Java 关于中文乱码问题的解决方案与经验【转载】
- Java 关于中文乱码问题的解决方案与经验
- Java 关于中文乱码问题的解决方案与经验
- Java 关于中文乱码问题的解决方案与经验
- Java 关于中文乱码问题的解决方案与经验
- Java 关于中文乱码问题的解决方案与经验(转)
- JAVA关于中文乱码问题的解决方案与经验
- Java 关于中文乱码问题的解决方案与经验
- 转载:Java 关于中文乱码问题的解决方案与经验
- Java 关于中文乱码问题的解决方案与经验
- Java关于中文乱码问题的解决方案与经验
- Java关于中文乱码问题的解决方案与经验
- Java关于中文乱码问题的解决方案与经验
- Java 关于中文乱码问题的解决方案与经验 (2)
- Java 关于中文乱码问题的解决方案与经验 (2)
- Java 关于中文乱码问题的解决方案与经验 (1)
- Java 关于中文乱码问题的解决方案与经验 (1)
- 关于java中文乱码问题一些解决方案和经验
- C++异常处理 http://blog.csdn.net/oury
- Visual Basic图像处理基础讲座
- 数据库查询中的通配符
- Java 关于中文乱码问题的解决方案与经验 (1)
- 如何在自己的博客中加入时钟、天气、流量(更新修正)1月17日
- Java 关于中文乱码问题的解决方案与经验 (2)
- 在VB6中用命令行为模式控制GUI动作
- D3D中的第一人称视角
- Java深入探索之道Java类加载机制的奥秘
- 过完年终于回来了.
- 一道sql面试题
- 表单精确验证代码
- Throw an exception while construct an object
- 新年新气象