我在解码某些编码字符时遇到了一些麻烦。 我需要解码的是%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
答案 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
表示适当的角色。