无法理解如何让Groovy输出我的unicode字符串

时间:2012-01-22 13:26:19

标签: unicode groovy

尝试通过将多字符数据保存到数据库来调试问题,我将问题范围缩小到Groovy如何处理我的字符串。 我有这段代码:

println "Hi!"
def strings=[
 "Dies ist eine Testlinie in deutscher Sprache.",
 "C'est une ligne d'essai en français.",
 "Is é seo an líne tástála i nGaeilge..",
 "Esta é unha liña de proba en galego.",
 "Questa è una linea di prova in italiano.",
 "Dette er en test linje i norsk.",
 "Þetta er próf lína í íslensku.",
 "Góðan dag, hvernig ert þú að gera?",
 "Ich komme aus Köln"
]
strings.each {
  println it
}

我保存了这段代码,将我的浏览器中的行复制到GroovyConsole中。

如果我在Windows命令行上运行它:

groovy testAnsi.groovy

我明白了:

Hi!
Dies ist eine Testlinie in deutscher Sprache.
C'est une ligne d'essai en franτais.
Is Θ seo an lφne tßstßla i nGaeilge..
Esta Θ unha li±a de proba en galego.
Questa Φ una linea di prova in italiano.
Dette er en test linje i norsk.
▐etta er pr≤f lφna φ φslensku.
G≤≡an dag, hvernig ert ■· a≡ gera?
Ich komme aus K÷ln

如果我用Notepad ++打开文件,它会说它用ANSI编写并显示很多奇数字符。 如果我用记事本打开它,它会说它是用ANSI编写的,并显示正确的字符。

如果我然后用Unicode中的记事本保存文件(它显示为带有Notepad ++中所有正确字符的UC2 Little Endian),并在命令行上运行它:

groovy -c UTF-16 testUnicode.groovy

我明白了:

Hi!
Dies ist eine Testlinie in deutscher Sprache.
C'est une ligne d'essai en franτais.
Is Θ seo an lφne tßstßla i nGaeilge..
Esta Θ unha li±a de proba en galego.
Questa Φ una linea di prova in italiano.
Dette er en test linje i norsk.
▐etta er pr≤f lφna φ φslensku.
G≤≡an dag, hvernig ert ■· a≡ gera?
Ich komme aus K÷ln

但是当我在GroovyConsole中运行ANSI或Unicode文件时,我在输出面板中得到了预期的结果。

现在,如果我这样做:

more testAnsi.groovy

如果我要运行脚本,我会得到同样的胡言乱语。

如果我这样做:

more testUnicode.groovy
除了冰岛人之外,我得到了正确的角色。

注意,如果我在Linux机器上运行代码,我会得到相同的结果,但是当使用cat显示源文件的内容时,我总能得到正确的字符。

我很难过。显然,我做错了什么,但我不知道是什么。

如何让Groovy输出字符串中的字符,就像我在文件中输出一样?

1 个答案:

答案 0 :(得分:4)

Groovy在Java默认字符集中输出,您的平台为code page 1252(西欧“ANSI”)。但是结果显示在code page 437旧DOS“OEM”代码页中。

您可以通过输入以下内容来解决此问题:

chcp 1252
在运行Groovy之前在命令提示符下

。当然,程序的输出必须符合该代码页,因此您可以在示例中使用西欧口音,但您将无法编写任何其他字母。

为了测试Unicode行为,建议您避免像瘟疫这样的Windows命令提示符。