2012-03-13 4 views
-1

Может ли кто-нибудь увидеть разницу между этими двумя блоками кода?Странное поведение UTF8 GetBytes() с символами non-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 на удаленный сервер.

По какой-то причине, когда я передаю символы не-ascii в sInput, сервер возвращает 500 ошибок, когда я использую первую связку кода, но он отлично работает со вторым. Я попытался передать true и false в конструктор UTF8Encoding(), но ничего не изменилось.

+1

Что вы спрашиваете? Чем отличаются образцы кода или что-то еще? – Oded

ответ

1

Единственное различие между Encoding.UTF8 и new 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 
Смежные вопросы