这是什么字符编码?

What character encoding is this?

提问人: 提问时间:5/2/2011 最后编辑:skaffman 更新时间:11/17/2023 访问量:4684

问:

我正在与一个 Oracle 数据库连接,它有一些混乱的编码(根据 db 属性的 ASCII7,但实际上编码韩语字符)。

当我从 resultSet 中获取一些韩文字符串并查看字节时,事实证明它们与此文件完全对应(我通过谷歌搜索一些字节序列找到): http://211.115.85.9/files/raw3.txt

有点诡异,因为它似乎是互联网上唯一与这种特定编码有关的东西......

当使用 EditPlus3 查看该文件时,它显示 3 列。

第一列是按字母顺序排列的韩文字符列表。第二个是我在查看从 Oracle 数据库传递的 Java 字符串时发现的奇怪编码。第三个是UTF8。

我试图弄清楚中间列的编码内容。谁能给我指出正确的方向?

(我真的不想每次需要调用数据库时都从这个文件中读取......

UTF-8 字符编码

评论


答:

0赞 schweissdruese 5/2/2011 #1

它是 UTF-8 编码:

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

我不知道中间一列的含义,但第三列是第一行韩文的十六进制表示。

使用十六进制编辑器监视文件,这可能会有所帮助。

祝你好运!:)

评论

0赞 5/2/2011
我。。的。。。对不起,我已经知道了。我只对第二列感兴趣。
0赞 RARE Kpop Manifesto 7/7/2023
我发现了一个韩国网站,在其网格上特别突出显示了 .当然,它只是音节的一小部分,但给出了映射如何工作的想法()(我认为有完整的映射文件)b0a1EUR-KRhttps://coding-factory.tistory.com/810unicode.org
0赞 schweissdruese 5/2/2011 #2

我写了一个小脚本,解码了前两行的中间一栏蛮力。

以下四个结果是韩文,但我不确定它们是否有意义:

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

我希望这会有所帮助。有好的一天!:)

评论

0赞 5/2/2011
:D感谢你的努力,但第一列是实际对应的韩文字符()。第二列是我试图识别的未知编码,我知道它编码了一个韩语字符。(是的,它似乎是一种 32 位编码方案。
5赞 Joachim Sauer 5/2/2011 #3

它是 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);

这在我的系统上打印가。

我找到了这个PDF文件,它更详细地解释了问题(以及它是如何发生的)。

评论

0赞 5/3/2011
了不起。先生,你真是太棒了。
0赞 Andrei Calinescu 11/17/2023
PDF 链接已损坏。我相信这是同一PDF的存档版本:web.archive.org/web/20130909072935/http://brianhitchcock.net/...
0赞 Joachim Sauer 11/17/2023
@AndreiCalinescu:是的,就是那个,我更新了链接。