java中关于字符、资料乱码的笔记
老生常谈的问题了,记录一下以便他人翻阅。 结论: 1. 字符串与byte数组的转换 默认编码是采用系统的编码(例如Windows下是GB18030) 2. java类文件中本身包含的字符串,采用什么编码是 根据javac编译时的环境变量决定的。 穿插一下: 重复一下http中的中文乱码问题,例如使用prototype.js发送包含中文的ajax报文时,Servlet接收端可能会遇到乱码问题。该情况可以用以下api解决: ServletRequest.setCharacterEncoding ServletResponse.setCharacterEncoding 程序代码: Windows上的测试结果: Default=c5b5bbf9d1c7 ISO-8859-1=3f3f3f GBK=c5b5bbf9d1c7 UTF-8=e8afbae59fbae4ba9a ///////////////////////// 诺基亚 诺基亚 ?¦Ì?¨´?? ŵ�� Linux上的测试结果: 1. 在Locale=zh的情况下,javac,然后再java执行。结果如下: -bash-3.00$ java BTest Default=c5b5bbf9d1c7 ISO-8859-1=3f3f3f GBK=c5b5bbf9d1c7 UTF-8=e8afbae59fbae4ba9a ///////////////////////// 诺基亚 诺基亚 ???ù?? ??? 2. 在Locale=C的情况下,直接java执行(也就是java文件还是在Locale=zh的环境下编译的)。结果如下: -bash-3.00$ java BTest Default=3f3f3f ISO-8859-1=3f3f3f GBK=c5b5bbf9d1c7 UTF-8=e8afbae59fbae4ba9a ///////////////////////// ??? ??? ??? ??? 3. 在Locale=C的情况下,javac,然后再java执行。结果如下: -bash-3.00$ java BTest Default=c5b5bbf9d1c7 ISO-8859-1=c5b5bbf9d1c7 GBK=3f3f3fa8b43f3f UTF-8=c385c2b5c2bbc3b9c391c387 ///////////////////////// 诺基亚 ??? 诺基亚 ??? 关于对字符编码的问题,可以参考: http://www.utf.com.cn/article/s320 UTF-8 字符集基础(1) http://www.phpweblog.net/XBOX/archive/2008/09/06/5726.html http://javajiao.iteye.com/blog/151995