美文网首页
BAE 应用日志中中文乱码问题

BAE 应用日志中中文乱码问题

作者: tanxiniao | 来源:发表于2015-11-29 09:40 被阅读0次

    不少用户都遇到中文乱码这个问题的困扰,其实字符编码的问题,确实是个很繁琐的问题,我就将自己知道的一丁点内容跟大家分享一下,抛砖引玉。

    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。

    Paste_Image.png

    这样之前stdout日志中输出的中文乱码就成功显示了。

    Paste_Image.png
    servlet应用页面上的中文乱码

    顺便说一嘴,servlet应用页面上的中文乱码问题怎么解决?
    得在程序中添加两句话:
    response.setCharacterEncoding("UTF-8");
    response.setHeader("content-type","text/html;charset=UTF-8");

    Paste_Image.png

    最后在浏览器中显示:

    Paste_Image.png

    这是为什么呢?
    这是因为你程序用UTF-8编码,而浏览器用GB2312解码,因此会出现乱码;
    来看一下流程图,对这个问题就清晰了:

    Paste_Image.png

    response.setContentType("text/html;charset=UTF-8");
    目的是为了控制浏览器的行为,即控制浏览器用UTF-8进行解码;
    response.setCharacterEncoding("UTF-8");
    因为这句话的意思是为了将response对象中的数据以UTF-8解码后发向浏览器。
    也就是刚才的流程图就是这样:

    Paste_Image.png
    参考博客: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:

    Paste_Image.png

    相关文章

      网友评论

          本文标题:BAE 应用日志中中文乱码问题

          本文链接:https://www.haomeiwen.com/subject/bwtjhttx.html