2012-03-13 58 views
-1

任何人都可以看到這兩個代碼塊之間的區別嗎?UTF8 GetBytes()與非ASCII符號的奇怪行爲

1:

Byte[] arInput = Encoding.UTF8.GetBytes(sInput); 

2:

System.Text.UTF8Encoding UTF8 = new System.Text.UTF8Encoding(); 
Byte[] arInput = UTF8.GetBytes(sInput); 

然後我寫arInput在System.IO.Stream,並在發送的HttpWebRequest流至遠程服務器。

由於某些原因,當我在sInput中傳遞非ASCII字符時,當我使用第一批代碼時,服務器返回500錯誤,但第二條代碼正常工作。我嘗試將true和false傳遞給UTF8Encoding()構造函數,但沒有任何更改。

+1

什麼你問?代碼示例或其他內容有什麼不同? – Oded 2012-03-13 11:44:09

回答

1

Encoding.UTF8new UTF8Encoding()之間唯一的區別在於,前者啓用了BOM,但如果只事項GetPreamble()稱爲 - 所以調用GetBytes()時,恰好有沒有什麼區別。

我建議你用兩個編碼的輸入輸出示例進行更新。

例子:

Encoding enc = new UTF8Encoding(); 
string s = "abc"; 
Console.WriteLine("new UTF8Encoding(), preamble: {0}", 
    BitConverter.ToString(enc.GetPreamble())); 
Console.WriteLine("new UTF8Encoding(), payload: {0}", 
    BitConverter.ToString(enc.GetBytes(s))); 
enc = Encoding.UTF8; 
Console.WriteLine("Encoding.UTF8, preamble: {0}", 
    BitConverter.ToString(enc.GetPreamble())); 
Console.WriteLine("Encoding.UTF8, payload: {0}", 
    BitConverter.ToString(enc.GetBytes(s))); 

其中寫道:

new UTF8Encoding(), preamble: 
new UTF8Encoding(), payload: 61-62-63 
Encoding.UTF8, preamble: EF-BB-BF 
Encoding.UTF8, payload: 61-62-63