首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么UTF-7是正确的,而UTF-8不是正确的?

为什么UTF-7是正确的,而UTF-8不是正确的?
EN

Stack Overflow用户
提问于 2020-09-18 07:34:59
回答 2查看 389关注 0票数 1

我有一个Base64字符串,我想把它转换成UTF-8,如下所示:

代码语言:javascript
复制
byte[] encodedDataAsBytes = System.Convert.FromBase64String(vcard);
return Encoding.UTF8.GetString(encodedDataAsBytes);

这是因为字符串中的Umlauts需要正确显示。我面临的问题是,当我使用UTF-8作为编码时,这些数值是,而不是。但是当我使用UTF-7

代码语言:javascript
复制
return Encoding.UTF7.GetString(encodedDataAsBytes);

一切都很好。

为什么会这样呢?UTF-8不应该有能力处理空投吗?

EN

回答 2

Stack Overflow用户

发布于 2021-10-01 11:42:57

您的vcard是UTF-7编码的.

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

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

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

票数 1
EN

Stack Overflow用户

发布于 2021-07-15 19:59:28

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

代码语言:javascript
复制
// 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()。

代码语言:javascript
复制
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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63951203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档