2012-12-27 60 views
-1

我有一个像“%E6%B1%82%E5%8A%A9”的字符串。关于JAVA编码识别

我的问题是我怎么知道它是由“UTF-8”编码或不是。它也好像GBK(或GB2312)编码。

谢谢。

+1

“abc”可以编码为UTF-8,UTF-16,如果不编码(ASCII编码)仍然相同。 =>对于相同的字符串,也许你可以有多个有效的编码。 – 2012-12-27 03:13:45

回答

5

这不是UTF-8编码,它被称为Percent or URL Encoding

您可以使用URLDecoder API以Java解码。

+0

感谢您的回复。 URLDecoder.decode将%XX转换为一个二元数字。编码应该由解码函数的第二个参数给出。对于上面的字符串,URLDecoder.decode(str,“utf-8”)可以正常工作。但对于另一个字符串,如“%C4%E3%BA%C3”,它会返回杂乱的代码,并应将编码设置为“gb2312”。 – thomaslee

+1

然后你可以做的是手动将百分比编码字符串转换为字节数组,然后使用'juniversalchardet'来猜测实际的编码并将其转换为'UTF-8'(更多请点击http://stackoverflow.com/a/1678810/1734130)。但是,这是非常混乱和**非常**不可靠的只有4个字节长的字符串 – mvp

+0

我已经实现了一个函数将百分比编码的字符串转换为字节数组。我感到困惑的是应该给它哪种编码。我会尝试'juniversalchardet'。谢谢! – thomaslee

1

没有办法以100%的准确率检测字节流的编码,仍然有库能够做出相当有效的教育猜测。其中我会推荐juniversalchardet

+0

不幸的是,在这种情况下,'juniversalchardet'会将此文本检测为ASCII或UTF-8,这并不能真正帮助获取编码文本 – mvp

+0

感谢您的回复。 'juniversalchardet'可以帮助我。 – thomaslee