任何人都可以看到这两段代码之间的区别吗?
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()构造函数,但没有任何改变。
答案 0 :(得分: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