为什么UTF-7解释元音变音符是正确的,而UTF-8解释不正确



我有一个Base64字符串,我想将其转换并解码为UTF-8,如下所示:

byte[] encodedDataAsBytes = System.Convert.FromBase64String(vcard);
return Encoding.UTF8.GetString(encodedDataAsBytes);

这是因为字符串中的元音变音符需要正确显示。我面临的问题是,当我使用UTF-8编码时,元音变音符处理不正确。但当我使用UTF-7 时

return Encoding.UTF7.GetString(encodedDataAsBytes);

一切都很好。

为什么?UTF-8难道不能处理变音吗??

您的vcard是UTF-7编码的。

这就是Encoding.UTF7.GetString(encodedDataAsBytes(会给您正确的结果。

对其进行编码后,您无法决定其他编码。

若要使用UTF-8编码,您需要在变量vcard获得其值之前访问字符串

我也遇到了类似的问题。在我的例子中,我使用javaScript btoa((在Web UI中将文件名编码为Base64,并将其发送到服务器。在服务器端的.net内核上,我使用下面的代码将其解码回字符串文件名。

// Note: encodedFilename is the result of btoa() from the client web UI.
var raw = Convert.FromBase64String(encodedFilename);
var filename = Encoding.UTF8.GetString(raw);

它未能解码ä。然而,当我使用Encoding.UTF7((时,它起了作用,但我认为这不是正确的解决方案。我相信这是由于不同的编码/解码类型。btoa((是ASCII的二进制。我真正需要的是b64EncodeUnicode((。

function b64EncodeUnicode(str) {
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, function(match, p1) {
return String.fromCharCode('0x' + p1);
}));
}

代码参考:https://developer.mozilla.org/en-US/docs/Glossary/Base64

最新更新