我想为我的应用程序发出的电子邮件添加自定义标头。标题名称只能包含ASCII字符,但对于值和用户可能会输入UTF-8字符,我必须对它们进行base64编码。此外,我必须将它们解码回UTF-8才能在UI中将它们显示给用户。在C#.NET中编码非ascii字符
这样做的最好方法是什么?
我想为我的应用程序发出的电子邮件添加自定义标头。标题名称只能包含ASCII字符,但对于值和用户可能会输入UTF-8字符,我必须对它们进行base64编码。此外,我必须将它们解码回UTF-8才能在UI中将它们显示给用户。在C#.NET中编码非ascii字符
这样做的最好方法是什么?
为了从.NET字符串转换为底座64,使用UTF8作为底层编码:
string base64 = Convert.ToBase64String(Encoding.UTF8.GetBytes(text));
并扭转过程:
string text = Encoding.UTF8.GetString(Convert.FromBase64String(base64));
完全有可能跳过UTF8步。但是,UTF8通常会导致使用UTF16的较小有效负载,因此我建议使用UTF8作为基础编码。
我不确定当你说用户可以输入UTF8字符时你的意思。 .net框架使用UTF16作为其工作字符串编码。您在.net中使用的字符串始终使用UTF16编码。也许你只是意味着文本可以包含非ASCII字符。
我更新了这个问题,我想要base64编码。只要我能解码它,我不在乎人的可读性。 –
我的答案现在给出代码 –
@crdx我不知道你的意思。 –
为了编码字符串:
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);
http://stackoverflow.com/q/497813/629926 – user629926
的可能DUP http://stackoverflow.com/questions/1888066/encode-string-to-utf8 –
定义“编码”。你想在编码时可读吗?您可以去除所有非ASCII字符,但无法返回UTF-8。否则,您可以使用base-64编码,但是如果不对其进行解码(或者“学习”如何读取base-64),您将无法读取它。 –