2012-06-25 1 views
1

У меня странная проблема при подключении к Oracle с Groovy. я создал следующую тестовую таблицу:Проблема с кодировкой Groovy и Oracle

CREATE TABLE t (text VARCHAR2 (256)); 

INSERT INTO t VALUES ('[Hallo][Hällo][Hello][Hi]'); 

Я хочу, чтобы найти все подстроки, заключенные в квадратных скобках. Следующий Groovy код не удается найти вторую ([Hallo]):

import groovy.sql.Sql 

sql = Sql.newInstance('jdbc:oracle:thin:@server:1521:ORCL', 'user', 
    'password', 'oracle.jdbc.OracleDriver'); 

sql.eachRow("select text from t") { row -> 
    row.text.eachMatch(/\[[A-Za-zä\-]+\]/) { match -> 
     println match 
    } 
} 

Использование строки непосредственно работает, как ожидалось:

'[Hallo][Hällo][Hello][Hi]'.eachMatch(/\[[A-Za-zä\-]+\]/) { match -> 
    println match 
} 

делает также то же самое от старого доброго Java работает отлично. Поэтому я предполагаю, что проблема должна существовать где-то внутри объекта Groovy SQL.

Последнее, что я заметил, состоит в том, что две строки (получение строки из результирующего набора или вложение в исходный код) не имеют одинаковой кодировки. Когда я печатаю Hällo внутри eachRow, я получаю H?llo в консоли Windows, но когда я печатаю его напрямую, вместо этого получаю H├νllo.

ответ

2

После дальнейших экспериментов проблема заключается в том, что Groovy считывает мой сценарий с помощью кодировки платформы по умолчанию. Если я передаю -c UTF8 интерпретатору Groovy, я получу ожидаемые результаты.

Смежные вопросы