[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。
Global site tag (gtag.js) - Google Analytics