2011-11-23 107 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);