使用非ascii符号的UTF8 GetBytes()的奇怪行为
本文关键字:UTF8 ascii 符号 GetBytes | 更新日期: 2023-09-27 18:27:42
有人能看到这两个代码块之间的区别吗?
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()构造函数,但没有任何变化。
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