1

使用 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
}

从好的 ol' Java 做同样的事情也可以正常工作。所以我猜测问题应该存在于 Groovy SQL 对象内部的某个地方。

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

4

1 回答 1

3

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

于 2012-06-25T09:56:43.050 回答