变音符号的解码问题

时间:2018-08-23 08:09:39

标签: java string utf-8 character-encoding

下面两个字符串之间有什么区别?当我解码第一个字符串时,它可以正常工作,并且我可以看到二向色字符显示得很好。

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);

有人可以告诉我这是怎么回事吗?这些字符串是我们从上游获取的,因此我们无法对其进行控制。

2 个答案:

答案 0 :(得分:1)

第二个序列解码为U + FFFD REPLACEMENT CHARACTER,用于替换其值未知或无法用Unicode表示的输入字符。

这意味着您可能会看到类似�。

您无法在客户端上进行任何修复,问题出在服务器上,需要在服务器上修复。

答案 1 :(得分:0)

%C3%B6是字符ö的有效编码值,因此值“ m%C3%B6torhead album”可以完美解码。 在第二种情况下,“%EF%BF%BD”对于UTF-8编码中的任何字符集而言都不是有效的编码值,因此不会对其进行解码。