Groovy和Oracle编码问题

时间:2012-06-25 09:27:14

标签: regex oracle groovy

使用Groovy连接到Oracle时,我遇到了一个奇怪的问题。 我创建了以下测试表:

CREATE TABLE t (text VARCHAR2 (256));

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

我想找到括在方括号中的所有子串。以下Groovy代码无法找到第二个([Hällo]):

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对象的某个地方。

我注意到的最后一件事是两个字符串(从结果集中获取字符串并将其嵌入到源代码中)没有相同的编码。当我在eachRow内打印Hällo时,我在Windows控制台中得到H?llo,但是当我直接打印它时,我得到H├νllo

1 个答案:

答案 0 :(得分:3)

经过进一步的实验,问题似乎是Groovy使用默认的平台编码读取我的脚本。如果我将-c UTF8传递给Groovy解释器,那么我会得到预期的结果。