0

我有一个 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 不应该能够处理变音符号吗?

4

2 回答 2

0

您的电子名片采用 UTF-7 编码。

这就是为什么Encoding.UTF7.GetString(encodedDataAsBytes); 给你正确的结果。

编码后,您无法决定另一种编码。

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

于 2021-10-01T11:42:57.983 回答
-1

我有一个类似的问题。在我的例子中,我使用 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

于 2021-07-15T19:59:28.457 回答