在C# .NET中对非ASCII字符进行编码

7
我想在我的应用程序发送的电子邮件中添加自定义标题。标题名称只能包含ASCII字符,但对于值和用户可能输入UTF-8字符,我必须对它们进行base64编码。另外,我必须将它们解码回UTF-8以便在UI中向用户显示。
最好的方法是什么?

http://stackoverflow.com/q/497813/629926 - user629926
可能是重复的问题,参考链接:http://stackoverflow.com/questions/1888066/encode-string-to-utf8 - Steve Danner
1
定义“编码”。在编码时,您想它是可读的吗?您可以剥离所有非ASCII字符,但是您将无法返回到UTF-8。否则,您可以使用base-64编码,但是您将无法在没有解码它(或您“学习”如何以base-64阅读)的情况下阅读它。 - Jeff Mercado
好的,我想要base64。问题已更新。 - Reza S
2个回答

10

将 .net 字符串转换为 base64,使用 UTF8 作为底层编码:

string base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(text));

并且要逆转这个过程:

string text = Encoding.UTF8.GetString(Convert.FromBase64String(base64));

可以完全跳过UTF8步骤。然而,与UTF16相比,UTF8通常会产生更小的负载,因此我建议使用UTF8作为底层编码。


当你说用户可以输入UTF8字符时,我不确定你的意思。.net框架使用UTF16作为其工作字符串编码。在.net中使用的字符串总是以UTF16编码的。也许你只是指文本可能包含非ASCII字符。


我更新了问题,我想要base64编码。只要我能解码,我不关心人类可读性。 - Reza S
@crdx 我不知道你的意思。 - David Heffernan

3

对字符串进行编码:

var someUtf8Str = "ఠఠfoobarఠఠ";
var bytes = Encoding.UTF8.GetBytes(someUtf8Str);
var asBase64Str = Convert.ToBase64String(bytes);

解码方法:

var bytes = Convert.FromBase64String(asBase64Str);
var asUtf8Str = Encoding.UTF8.GetString(bytes);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接