如何修复Encoding.ASCII.GetBytes的意外输出

时间:2019-04-12 01:23:30

标签: c#

我在Encoding.ASCII.GetBytes方法的输出中看到意外的字符(?)。

所以我正在做以下事情:

https://$DOMAIN:8080/

myString在哪里

var stringBytes = Encoding.ASCII.GetBytes(myString);

如果我愿意,现在就可以:

{
  "$id": "1",
  "Note": "<p><span style=\"font-family: &quot;Courier New&quot;;\">aaaa</span> 
  <br></p>"
}

然后myString1返回为:

var myString1 = System.Text.Encoding.Default.GetString(stringBytes)

请注意在上一次操作中 aaaa 如何转换为?aaaa

有人可以告诉我我在这里想念的吗?谢谢。

1 个答案:

答案 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问题。