У меня странная проблема при подключении к 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
.