4

我在解码一些编码字符时遇到了一些麻烦。我需要解码的是 %E9,我有一个像这样的字符串 D%E9bardeur 和 degr%E9 我在我的 java 类中所做的如下:

try
      {
        System.out.println(o);// test
        o = URLDecoder.decode((String) o, "UTF-8");
      }
      catch (UnsupportedEncodingException e)
      {
        e.printStackTrace();
      }

在这个操作之后,我得到的是

D�bardeur and degr�

当我不解码为 utf-8 时也会发生同样的情况

有什么建议吗?谢谢

4

2 回答 2

5

%E9 不是 UTF-8。

解码的正确方法是:

URLDecoder.decode((String) o, "ISO-8859-1")
于 2013-08-21T08:42:43.537 回答
1

通过%E9,你的意思是你的字符串中有一个字节计算为十六进制E9吗?因为如果是这样,则在 UTF-8 中将其标记为“多字节”,并且后面还有 2 个“连续字节”(在正确范围内)。

因为记住,UTF-8 是变长编码,所以有些码位(字符值)用 1 个字节表示,有些用 2、3 等表示。

如果您有一个被视为 UTF-8 的字符串并且E9遇到了,则接下来的 2 个字节需要在正确的范围内。例如,在此字符串中00,后面E9的 不是有效的继续字节:

http://hexutf8.com/?q=0x640x650x670x720xe90x00

这是一个示例,其中E9字符串后面跟着正确的 2 个字节:

http://hexutf8.com/?q=0xc20xa90xe90x810xaa

并表示适当的字符。

于 2014-11-15T04:38:11.547 回答