不少用户都遇到中文乱码这个问题的困扰,其实字符编码的问题,确实是个很繁琐的问题,我就将自己知道的一丁点内容跟大家分享一下,抛砖引玉。
java应用日志中文乱码问题
这个问题是由于BAE使用的java JVM内核不支持中文导致的,需要配置下jvm.ini文件。
这里配置jvm.ini的时候可能会遇到这样一个问题:报错#Error: Could not find or load main class ???-Xms=64m;windows下的文本编辑器会在utf-8的文件开头添加“0xEF,0xBB,0xBF”三个字节。可以尝试用别的编辑器新建一个文件,而不是在原来的文件上修改。也有的朋友尝试在eclipse用GBK编码编写了jvm.ini就通过了。
如何配置?
按照官网给出的教程:
http://bce.baidu.com/doc/BAE/Java.html#.E9.85.8D.E7.BD.AEJVM.E5.8F.82.E6.95.B0
在ROOT.war同级的目录下创建.bae文件夹,里面创建jvm.ini文件。
-Xms64m
-Xmx256m
-XX:PermSize=32m
-XX:MaxPermSize=128m
-Dfile.encoding=UTF-8
另外,配置完这个之后,还要保证你的程序编码也是utf-8。
这样之前stdout日志中输出的中文乱码就成功显示了。
servlet应用页面上的中文乱码
顺便说一嘴,servlet应用页面上的中文乱码问题怎么解决?
得在程序中添加两句话:
response.setCharacterEncoding("UTF-8");
response.setHeader("content-type","text/html;charset=UTF-8");
最后在浏览器中显示:
这是为什么呢?
这是因为你程序用UTF-8编码,而浏览器用GB2312解码,因此会出现乱码;
来看一下流程图,对这个问题就清晰了:
response.setContentType("text/html;charset=UTF-8");
目的是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码;
response.setCharacterEncoding("UTF-8");
因为这句话的意思是为了将response对象中的数据以UTF-8解码后发向浏览器。
也就是刚才的流程图就是这样:
参考博客:http://blog.csdn.net/xiazdong/article/details/7217022
这就是java页面和日志中中文乱码怎么解决的问题。
nodejs应用控制台输出中文乱码问题
刚才讲了java应用中文乱码的问题,现在说一下nodejs应用,其实更简单:
在server.js中设置:
res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});
同时保证server.js的格式也得为utf-8: