此现象只发生在运行期,PDE的开发环境未出现乱码!
详解:
1. jet生成的java文件总是本地默认字符集格式,并且里面的中文是正常显示的,可以查看其生成的 *.java 文件,
2. 如果构造JETEmitter时指定UTF-8,则将java文件编译成class时,class反编译出来就是乱码,所以无论对generate之后的string如何转码都没用了。
3. 如果构造JETEmitter时指定GBK,则将java文件编译成class时,class反编译出来是unicode,里面的中文都类似这样: \u4e0d\u80fd
方法一:
1.构造JETEmitter的时候指定GBK字符集
JETEmitter emitter = new JETEmitter(new String[]{templateUriPath},relativeUri, classLoader,"GBK");
2. emitter.generate之后的String,将会是一个GBK的内容(如果希望得到GBK的目标文件,则可以直接输出就结束)
3. 将此String转换成 UTF-8:EncodeUtil.unicodeToUtf8(content)
4. 保存转换后的内容,
JETService.save(monitor, newString.getBytes("UTF-8"), outputPath,fileName);
方法二:
解决办法:
1. template文件都用unicode保存,里面的中文都类似这样: \u4e0d\u80fd
2. emitter.generate之后的String,将会是一个unicode的内容,将此String转换成 UTF-8:
EncodeUtil.unicodeToUtf8(content)
3. 保存转换后的内容,
JETService.save(monitor, newString.getBytes("UTF-8"), outputPath,fileName);