将%E9解码为utf8失败

时间:2013-08-21 08:36:25

标签: java utf-8 decode

我在解码某些编码字符时遇到了一些麻烦。 我需要解码的是%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

时会发生同样的情况

有什么建议吗? THX

2 个答案:

答案 0 :(得分:5)

%E9不是UTF-8。

解码这个问题的正确方法是:

URLDecoder.decode((String) o, "ISO-8859-1")

答案 1 :(得分: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

表示适当的角色。