2012-06-25 52 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解釋器,那麼我會得到預期的結果。