我正在与 Oracle DB 进行交互,该数据库的编码有些混乱(根据数据库属性为 ASCII7,但实际上编码的是韩语字符)。
当我从结果集中获取一些韩语字符串并查看字节时,结果发现它们与此文件完全对应(我通过谷歌搜索一些字节序列发现):http://211.115.85.9/文件/raw3.txt
有点诡异,因为它似乎是互联网上唯一有关于这种特定编码的东西......
使用 EditPlus3 查看该文件时,显示 3 列。
第一列是按字母顺序排列的韩语字符列表。第二个是我在查看从 Oracle DB 传递的 Java 字符串时发现的奇怪编码。第三个是UTF8。
我正在尝试找出中间列的编码内容。有人能指出我正确的方向吗?
(我真的不想每次需要调用数据库时都必须从这个文件中实际读取......)
它是 EUC-KR(或类似)编码数据,解释为另一种 1 字节编码(ISO-8859-1 或类似)并使用 UTF-8 进行编码。
换句话说:它是编码错误的数据,但可能是可以挽救的:
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);
这会在我的系统上打印 tale。
我找到了这个 PDF 文件,它更详细地解释了问题(以及它是如何发生的)。
是UTF-8编码:
가 c2b0c2a1 eab080
각 c2b0c2a2 eab081
간 c2b0c2a3 eab084
갇 c2b0c2a4 eab087
...
我不知道中间一列的含义,但第三列是第一行韩文的十六进制表示。
使用十六进制编辑器观看文件,这可能会有所帮助。
祝你好运! :)
我写了一个小脚本并暴力解码了前两行的中间列。
以下四个结果是韩文,但我不确定它们是否有意义:
utf_16_be => 슰슡 슰슢
johab => 춿춰 춿춱
euc_kr => 째징 째짖
cp949 => 째징 째짖
我希望这有帮助。祝你今天过得愉快! :)