我有一个Base64字符串,我想把它转换成UTF-8,如下所示:
byte[] encodedDataAsBytes = System.Convert.FromBase64String(vcard);
return Encoding.UTF8.GetString(encodedDataAsBytes);这是因为字符串中的Umlauts需要正确显示。我面临的问题是,当我使用UTF-8作为编码时,这些数值是,而不是。但是当我使用UTF-7
return Encoding.UTF7.GetString(encodedDataAsBytes);一切都很好。
为什么会这样呢?UTF-8不应该有能力处理空投吗?
发布于 2021-10-01 11:42:57
您的vcard是UTF-7编码的.
这就是为什么Encoding.UTF7.GetString(encodedDataAsBytes);给出了正确的结果。
在对其进行编码之后,您无法决定其他编码。
要使用UTF-8编码,需要在变量vcard获得其值之前访问字符串。
发布于 2021-07-15 19:59:28
我也有过类似的问题。在我的示例中,我使用javaScript btoa()将文件名编码为Web中的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
https://stackoverflow.com/questions/63951203
复制相似问题