我在Encoding.ASCII.GetBytes方法的输出中看到意外的字符(?)。
因此,我正在执行以下操作:
var stringBytes = Encoding.ASCII.GetBytes(myString);
Run Code Online (Sandbox Code Playgroud)
myString在哪里:
{
"$id": "1",
"Note": "<p><span style=\"font-family: "Courier New";\">?aaaa</span>
<br></p>"
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做:
var myString1 = System.Text.Encoding.Default.GetString(stringBytes)
Run Code Online (Sandbox Code Playgroud)
然后,myString1返回为:
{
"$id": "1",
"Note": "<p><span style=\"font-family: "Courier New";\">?
aaaa</span><br></p>"
}
Run Code Online (Sandbox Code Playgroud)
请注意,在最后一次操作中,aaaa如何转换为?aaaa?
有人可以告诉我我在这里想念的吗?谢谢。
当您发现字符在0-127范围之外时,这是ASCII编码的预期行为,就像您的情况一样。要修复-切换到UTF8(因为它支持所有字符)或手动将0-127以外的所有字符编码为适合您的字符(对于JSON,您可以使用带有“ \ u”前缀的十六进制编码- "\ufeff")
由于某种原因,字符串“ aaaa”以BOM(0xFEFF)开头,您看不到它,但是它在那里,必须转换为“?” 通过ASCII编码。要查看字符代码,请选择一个字符串并将其打印为十六进制:
((int)(">aaaa"[1])).ToString("x") // gives FEFF on your string of length 6
Run Code Online (Sandbox Code Playgroud)
请注意,文本中间的BOM(字节顺序标记)通常是一个错误,在这种情况下,构造HTML的代码很可能是串联文件或类似的东西。Unicode.org的指南- 文件中间的U + FEFF应该怎么做?
感谢KlausGütter提供的BOM常见问题解答链接,感谢Tom Blodget在文本中间突出显示BOM的问题。