我在Encoding.ASCII.GetBytes方法的输出中看到意外的字符(?)。
所以我正在做以下事情:
https://$DOMAIN:8080/
myString在哪里
var stringBytes = Encoding.ASCII.GetBytes(myString);
如果我愿意,现在就可以:
{
"$id": "1",
"Note": "<p><span style=\"font-family: "Courier New";\">aaaa</span>
<br></p>"
}
然后myString1返回为:
var myString1 = System.Text.Encoding.Default.GetString(stringBytes)
请注意在上一次操作中 aaaa 如何转换为?aaaa ?
有人可以告诉我我在这里想念的吗?谢谢。
答案 0 :(得分:5)
当您发现字符在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
请注意,文本中间的BOM(字节顺序标记)通常是一个错误,在这种情况下,构造HTML的代码可能会串联文件或类似内容。 Unicode.org的指南-What should I do with U+FEFF in the middle of a file?
感谢Klaus Gütter链接到BOM常见问题,以及Tom Blodget突出显示文本中间的BOM问题。