尝试通过将多字符数据保存到数据库来调试问题,我将问题范围缩小到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输出字符串中的字符,就像我在文件中输出一样?
答案 0 :(得分:4)
Groovy在Java默认字符集中输出,您的平台为code page 1252(西欧“ANSI”)。但是结果显示在code page 437旧DOS“OEM”代码页中。
您可以通过输入以下内容来解决此问题:
chcp 1252
在运行Groovy之前在命令提示符下。当然,程序的输出必须符合该代码页,因此您可以在示例中使用西欧口音,但您将无法编写任何其他字母。
为了测试Unicode行为,建议您避免像瘟疫这样的Windows命令提示符。