2011-11-23 94 views
4

我想为我的应用程序发出的电子邮件添加自定义标头。标题名称只能包含ASCII字符,但对于值和用户可能会输入UTF-8字符,我必须对它们进行base64编码。此外,我必须将它们解码回UTF-8才能在UI中将它们显示给用户。在C#.NET中编码非ascii字符

这样做的最好方法是什么?

+0

http://stackoverflow.com/q/497813/629926 – user629926

+0

的可能DUP http://stackoverflow.com/questions/1888066/encode-string-to-utf8 –

+1

定义“编码”。你想在编码时可读吗?您可以去除所有非ASCII字符,但无法返回UTF-8。否则,您可以使用base-64编码,但是如果不对其进行解码(或者“学习”如何读取base-64),您将无法读取它。 –

回答

8

为了从.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字符。

+0

我更新了这个问题,我想要base64编码。只要我能解码它,我不在乎人的可读性。 –

+0

我的答案现在给出代码 –

+0

@crdx我不知道你的意思。 –

1

为了编码字符串:

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);