这是什么字符编码?

问题描述 投票:0回答:3

我正在与 Oracle DB 进行交互,该数据库的编码有些混乱(根据数据库属性为 ASCII7,但实际上编码的是韩语字符)。

当我从结果集中获取一些韩语字符串并查看字节时,结果发现它们与此文件完全对应(我通过谷歌搜索一些字节序列发现):http://211.115.85.9/文件/raw3.txt

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

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

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

我正在尝试找出中间列的编码内容。有人能指出我正确的方向吗?

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

utf-8 character-encoding
3个回答
5
投票

它是 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 文件,它更详细地解释了问题(以及它是如何发生的)。


0
投票

是UTF-8编码:

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

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

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

祝你好运! :)


0
投票

我写了一个小脚本并暴力解码了前两行的中间列。

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

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

我希望这有帮助。祝你今天过得愉快! :)

© www.soinside.com 2019 - 2024. All rights reserved.