[Groovy] groovy中如何解决编码问题
faithful_czx
2009-02-17
使用groovy写一个脚本,脚本文件编码方式为utf-8.
在文件里面写 def name ="有"; 就会报:Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed, Script8.groovy: 12: expecting anything but ''\n''; got it anyway @ line 12, column 15. 1 error 而有的汉字则不会报错。 后来发现将文件编码方式改成gbk编码就不报错了。 但我从java方法中(utf-8)传递一个中文变量到groovy脚本,与groovy脚本方法中同样中文进行比较却总是false。控制台输出groovy脚本中的中文总是乱码,java中传过来的中文变量则正常。 请问各位如何解决这个问题,让两个变量的编码一直并能正常比较。 |
|
wind13
2009-02-17
似乎是有类似的问题,有的时候我会在后面加个空格,我觉得可能是编码时与后面的"引号发生什么关系了,所以你如果写:
def name=" 有 " 可能就没事了,具体原因不清楚,但不建议用GBK编码,会很多新麻烦的,各页面都要改编码不说,以后想改回来也很麻烦。 再就是最好采用I18N的解决方式 def name=message(code:"system.output.have") 而在相应的 messages_zh_CN.properties 文件中加上: system.output.have=有 我想这应该是最好的办法吧~ |
|
faithful_czx
2009-02-17
谢谢wind13 的回答。
我做的这个项目是个应用程序,主要用java代码编写。只是部分脚本用的groovy。如何在应用程序中使用messages_zh_CN.properties 呢? |
|
wind13
2009-02-18
你能把你的程序搞个简易示例吗?我需要在本地调试一下才知道问题,因为编码问题通常比较麻烦,注意Java是否用了UTF-8以及Groovy是否真用了UTF-8,仅仅声明不一定就是真的编码方式,另外,Java应用程序应该也有相应的国际化解决方案吧……
刚查到一个解决方案: MyResource.java 文件: import java.util.*; public class MyResource extends ListResourceBundle { public Object[][] getContents() { return contents; } static final Object[][] contents = { { "test_proxy", "测试代理" } , { "test_server", "测试服务器" } }; } 应用方法: import java.util.*; public class MyClass { static ResourceBundle varMsg = ResourceBundle.getBundle("MyResource"); public String myFunc(){ return varMsg.getString("text_server"); } } Groovy中同样的道理吧~ |
|
faithful_czx
2009-02-20
ok,我试试看。。
|
|
romejiang
2009-02-24
不知道解决了没有?
groovy --encoding=UTF-8 Test.groovy 试试这样运行groovy程序,encoding参数顺序很重要,必须放在源文件前面,这是groovy的一个小bug。 |