EMF JET 乱码问题 - 详解字符集

此现象只发生在运行期,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);

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值