2012-06-25 54 views
1

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

CREATE TABLE t (text VARCHAR2 (256)); 

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

我想找到所有包含在方括号中的字符串。下面Groovy代码未能找到第二个([你好]):

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

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

回答

2

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