2012-12-30 59 views
3

理論問題:在C#中更改編碼?

比方說有這僅僅知道如何傳送ASCII字符來源之一。 (0..127)

假設有一個端點接收這些字符。

端點可以將那些字符解碼爲utf8嗎?

ascii chars 
     ... 
     ... 
     | 
     | 
     V 

    read as utf ? 

事情是這樣的僞代碼:

var txt="אבג"; 
    var _bytes=Encoding.ASCII.GetBytes(txt); <= it wont recognize [א] here 
    ...transmit... 
    var myUtfString=Encoding.UTF8.GetString(getBytesFromWire(); <= some magic has to be done here 

回答

3

這是可能的,但不使用UTF-8。
UTF8通過將多字節字符編碼爲128到255之間的字節序列來工作。
您的ASCII協議將無法傳輸這些字節。

相反,你需要一些機制來存儲任意Unicode代碼點或字節純ASCII文本:

  • 可以使用任何編碼得到的(非ASCII)字節流編碼的Unicode文本,然後使用Base64編碼傳輸這些字節
  • 您可以使用UTF7 encoding使用純ASCII字符編碼Unicode代碼點。
    如果您的文本大部分是ASCII文件,這將比Base64更具空間效率。
+0

哎呀.......現在我要讀如何UTF7工程,解決了這個問題。 :-) –

+0

@RoyiNamir:UTF7是一種像UTF8一樣的Unicode編碼。但是,與UTF8不同的是,它只使用純ASCII字符(或者說,字節)。你可以簡單地使用'Encoding.UTF7'類。 – SLaks

+0

這就是我想問的(你的編輯)誰在網絡上更詳細。 base64 vs utf7 ..... –

1
var txt = "אבג"; 
var str = Convert.ToBase64String(Encoding.UTF8.GetBytes(txt)); //<--ASCII 
//Transmit 
var txt2 = Encoding.UTF8.GetString(Convert.FromBase64String(str)); 
+1

謝謝你的回答! –