2011-05-02 90 views
2

我與Oracle數據庫接口,它有一些亂碼(ASCII數據根據數據庫屬性,但實際上是編碼韓文字符)。這是什麼字符編碼?

當我得到一些從ResultSet韓國串,並期待在字節,事實證明,他們完全對應到這個文件(我發現谷歌搜索一些字節序列):http://211.115.85.9/files/raw3.txt

均田令人毛骨悚然,因爲它似乎是互聯網上唯一有關於此特定編碼的東西......

使用EditPlus3查看時,該文件向我顯示3列。

第一列是韓文字母的字母列表。第二個是我從查看從Oracle數據庫傳來的Java字符串時發現的奇怪編碼。第三個是UTF8。

我想弄清楚中間列是編碼在哪裏。任何人都可以指向正確的方向嗎?

(我真的不希望有實際從該文件每次我需要調用一個DB的時間讀...)

回答

5

它是EUC-KR(或類似的)編碼數據,解釋爲另一個1字節編碼(ISO-8859-1或類似),並使用UTF-8編碼。

換句話說:它生病編碼的數據,但可能是salvagable:

byte[] bytes = new byte[] { (byte) 0xc2, (byte) 0xb0, (byte) 0xc2, (byte) 0xa1 }; 
String str = new String(bytes, "UTF-8"); 
bytes = str.getBytes("ISO-8859-1"); 
str = new String(bytes, "EUC-KR"); 
System.out.println(str); 

該打印我的系統上가。

我發現this PDF file更詳細地解釋了問題(以及它如何發生)。

+0

令人驚歎。先生,您真棒。 – bdares 2011-05-03 00:14:27

0

這是UTF-8編碼:

가 c2b0c2a1 eab080 
각 c2b0c2a2 eab081 
간 c2b0c2a3 eab084 
갇 c2b0c2a4 eab087 
... 

我不知道中間列的含義,但第三列是第一行中的Hangul的十六進制表示。

用十六進制編輯器觀察文件,這可能會有所幫助。

祝你好運! :)

+0

我......呃......對不起,我已經知道了。我幾乎只對第二欄感興趣。 – bdares 2011-05-02 07:40:53

0

我寫了一個小腳本,解碼了前兩行蠻力的中間一列。

以下四種結果是韓文,但我不知道,它們是否有意義:

utf_16_be => 슰슡 슰슢 
johab => 춿춰 춿춱 
euc_kr => 째징 째짖 
cp949 => 째징 째짖 

我希望幫助。祝你今天愉快! :)

+0

:D欣賞這種努力,但第一列是實際相應的韓文字符('각')。第二列是我試圖識別的未知編碼,我知道它編碼的是單個韓文字符。 (是的,它似乎是一個32位編碼方案。) – bdares 2011-05-02 09:41:50