Не могу понять, как заставить Groovy выводить строки Unicode - PullRequest
2 голосов
/ 22 января 2012

Пытаясь отладить проблему с сохранением данных из нескольких символов в базу данных, я сузил проблему до того, как 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 и отображает правильные символы.

Если я затем сохраняю файл с помощью Блокнота в Юникоде (он отображается как 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

Но когда я запускаю файл ANSI или Unicode в GroovyConsole, я получаю ожидаемыйрезультаты в панели вывода.

Теперь, если я сделаю:

more testAnsi.groovy

Я получу тот же бред, что и при запуске сценария.

Если я это сделаю:

more testUnicode.groovy

Я получаю правильные символы, за исключением исландских.

Обратите внимание, что я получаю точно такие же результаты, если я запускаю код в окне Linux, но при использовании cat дляотображать содержимое исходных файлов, я всегда получаю правильные символы.

Я в тупике.Очевидно, что я делаю что-то не так, но я не знаю, что.

Как мне заставить Groovy выводить символы, которые есть в моих строках, так же, как они у меня есть в файле?

1 Ответ

4 голосов
/ 22 января 2012

Groovy выводится в наборе символов Java по умолчанию, который для вашей платформы равен кодовая страница 1252 (западноевропейский «ANSI»). Однако результаты отображаются на кодовой странице 437 старой кодовой страницы DOS «OEM».

Вы можете исправить это, набрав:

chcp 1252

в командной строке перед запуском Groovy. Естественно, что выходные данные программы должны соответствовать этой кодовой странице, поэтому вы можете использовать западноевропейские акценты в своем примере, но вы не сможете писать другие алфавиты.

Для тестирования поведения Unicode вам лучше избегать командной строки Windows, например чумы.

...