下面两个字符串之间有什么区别?当我解码第一个字符串时,它可以正常工作,并且我可以看到二向色字符显示得很好。
String val = "m%C3%B6torhead album";
String decodedVal = URLDecoder.decode(val, StandardCharsets.UTF_8);
但是当我尝试解码以下字符串时,我看不到二向色字符工作正常。
String val = "m%EF%BF%BDtorhead album";
String decodedVal = URLDecoder.decode(val, StandardCharsets.UTF_8);
有人可以告诉我这是怎么回事吗?这些字符串是我们从上游获取的,因此我们无法对其进行控制。
答案 0 :(得分:1)
第二个序列解码为U + FFFD REPLACEMENT CHARACTER,用于替换其值未知或无法用Unicode表示的输入字符。
这意味着您可能会看到类似�。
您无法在客户端上进行任何修复,问题出在服务器上,需要在服务器上修复。
答案 1 :(得分:0)
%C3%B6是字符ö的有效编码值,因此值“ m%C3%B6torhead album”可以完美解码。 在第二种情况下,“%EF%BF%BD”对于UTF-8编码中的任何字符集而言都不是有效的编码值,因此不会对其进行解码。