UTF8 GetBytes()与非ascii符号的奇怪行为

时间:2012-03-13 11:40:36

标签: c# utf-8 stream httpwebrequest

任何人都可以看到这两段代码之间的区别吗?

1:

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

2:

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

之后我在System.IO.Stream中编写arInput,并将HttpWebRequest中的Stream发送到远程服务器。

由于某种原因,当我在sInput中传递非ascii字符时,当我使用第一堆代码时,服务器返回500错误,但它适用于第二个。我试图将true和false传递给UTF8Encoding()构造函数,但没有任何改变。

1 个答案:

答案 0 :(得分: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