是否有可能将unicode hex \ u0092显示(转换?)到.NET中的unicode html实体?

我有一些包含以下代码/值的字符串:

"You won\u0092t find a ...."

在此处输入图像描述

看起来该字符串包含Right Apostrophe特殊字符。

  • ref1: Unicode控制0092
  • ref2: ASCII图表(127 +额外扩展ascii)

我不知道如何将这个显示给webbrowser。 它会继续显示TOFU方框字符。 我的印象是unicode(hex)值00092可以转换为unicode(html)

我的理解是否正确?


更新1:

@ sam-ax建议我对unicode进行HtmlEncode。 那没用。 这里是…

在此处输入图像描述

请注意ampersand正确编码….

看起来有一种编码混淆。 在.NET中,字符串通常编码为UTF-16,右撇号应表示为\u2019 。 但在您的示例中,右撇号表示为\x92 ,这表明原始编码是Windows代码页1252 。 如果在Unicode文档中包含字符串,则无法正确解释字符\x92

您可以通过将字符串重新编码为UTF-16来解决问题。 为此,请将字符串视为字节数组,然后使用1252代码页将字节转换回Unicode:

 string title = "You won\u0092t find a cheaper apartment * Sauna & Spa"; byte[] bytes = title.Select(c => (byte)c).ToArray(); title = Encoding.GetEncoding(1252).GetString(bytes); // Result: "You won't find a cheaper apartment * Sauna & Spa" 

注意:我的答案很大程度上是基于猜测和查看System.Web 4.0的反编译代码。 参考源看起来非常相似(相同?)。

你是对的"’" (6个字符)可以在浏览器中显示。 但是,输出字符串包含"\u0092" (1个字符)。 这是一个控制字符,而不是HTML实体。

根据参考代码 , WebUtility.HtmlEncode()不会转换128到160之间的字符 – 此范围内的所有字符都是控制字符(和号在代码中是特殊的,与其他一些特殊的HTML符号一样)。

我的猜测是因为它们是控制字符,它们是在没有变换的情况下输出的,因为转换它会改变字符串的含义。 (我尝试使用LinqPad运行一些示例,但未渲染此角色。)

如果你真的想要转换这些字符(或删除它们),你可能必须在调用HtmlEncode()之前/之后编写自己的函数 – 可能有一些东西已经这样做但我不知道。

希望这可以帮助。

编辑: Michael Liu的回答似乎是正确的。 我在这里留下我的答案,因为在不知道字符串的输入编码的情况下它可能是有用的。