BAE 应用控制台输出中文乱码问题
小****子 · 小****子 发布于2015-11-29 09:47 浏览:3181 回复:5

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

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:

server.js的内容:

var http = require('http');

var port = 18080;

console.log("服务器运行的端口是:18080.");

http.createServer(function(req, res) {

    res.writeHead(200, {'Content-Type': 'text/html;charset=utf-8'});

    res.write('<h1>Node.js</h1>');

    res.end('<p>Hello World</p>');

}).listen(port);


在console端,日志中的显示:



点赞  ( 1 )
收藏
评论(5)
共5条回复 最后由乐****小回复于2019-09-02 00:41
#2十****你回复于2015-11-30 09:15:55

          666666666666666这样的分享的大神简直棒棒棒

0
#3b****8回复于2015-12-01 09:24:13

PHP目前为止,还没有遇到乱码问题,不过新建和编辑文件的时候,确保保存为utf-8编码格式很重要。

1
#4R****n回复于2016-04-05 13:22:33

顶,非常好的分享!已加精并置顶!

0
#5晓****利回复于2018-11-28 14:19:10

public static void main(String[] args) throws Exception {

//解决中文乱码

//IO流读取一行

InputStreamReader isr = new InputStreamReader(new FileInputStream("c:/Windows/WindowsUpdate.log"), "UTF-8");  

BufferedReader read = new BufferedReader(isr); 

while (read.ready()) {

System.out.println(read.readLine());

}

//IO流写入一行

//传入true表示按原文件内容后面追加

OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream("e:test.txt",true),"gb2312");

BufferedWriter bw=new BufferedWriter(osw);

for (int i = 0; i < 10; i++) {

bw.write(new Date().toLocaleString()+"【i="+i+"】");

bw.newLine();

}

bw.flush();

bw.close();

osw.close();

}

www.ccy8.cn     www.qiaozz.cn     www.jub8.cn     www.yeyux.cn     www.junzic.cn     www.lzcy8.cn  

0
#2乐****小回复于2019-09-02 00:41:48
该评论已删除
TOP