我有一个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