Encoding 某些UTF-8字符不会显示在浏览器上

Encoding 某些UTF-8字符不会显示在浏览器上,encoding,character-encoding,Encoding,Character Encoding,一些UTF-8字符,如等同于C2 96(连字符)的UTF-8。在浏览器上,它显示为(带有00 96的utf框)。而不是作为“-”(连字符)。这种行为有什么原因吗?我们如何纠正这一点 (有关代码,请参阅此URL) 我发现这可以用html实体来处理。有没有办法在不转换为html实体的情况下显示此内容?想到两个原因: 是否确实已将正确的字符代码输出到浏览器?最好检查一些十六进制查看器 您使用的字体在此代码点未定义字形 我怀疑这是因为U+0080和U+009F之间的字符是控制字符。我仍然有点惊讶,当直接

一些UTF-8字符,如等同于C2 96(连字符)的UTF-8。在浏览器上,它显示为(带有00 96的utf框)。而不是作为“-”(连字符)。这种行为有什么原因吗?我们如何纠正这一点

(有关代码,请参阅此URL)


我发现这可以用html实体来处理。有没有办法在不转换为html实体的情况下显示此内容?

想到两个原因:

  • 是否确实已将正确的字符代码输出到浏览器?最好检查一些十六进制查看器
  • 您使用的字体在此代码点未定义字形

  • 我怀疑这是因为U+0080和U+009F之间的字符是控制字符。我仍然有点惊讶,当直接在HTML中编码时,它们的显示方式与使用实体时有所不同,但基本上你不应该一开始就使用它们。U+0096不是真正的“连字符”,而是“警戒区的起点”


    有关更多信息,请参阅。基本上,尽量避免使用控制字符…

    您所说的字符是一个破折号,而不是连字符。其Unicode编码点为U+2013,UTF-8编码为
    E28093
    ,而非
    C2 96
    。您链接到的表不正确。前两列与UCS-2或Unicode无关;它们实际上包含所讨论的字符的编码。标记为“UTF-8hex”和“UTF-8native”的列完全是错误的,至少对于标记为128到159的行是错误的。实体
    和#150
    表示一个短划线,但UTF-8序列
    C2 96
    表示一个不可显示的控制字符


    无论如何,您不需要手动编码这些字符。只需告诉您的文本编辑器(或用于创建内容的任何编辑器)将文件另存为UTF-8。

    非常感谢。如果程序遇到这种情况,我们如何处理?我已经在gmail上尝试过了,它没有显示正确的信息。它将“保护区的开始”显示为“-”任何想法?您希望如何处理这些想法将取决于应用程序。您可能希望去除字符,或用具有类似显示特征的另一个Unicode字符替换字符(例如,使用正确的连字符)。是。。字符代码是正确的。我已经通过十六进制查看器检查了它。我承认它不是连字符。但它肯定是一个UTF8字符。正如所建议的,表明字符为“防护区开始”。当与html实体(–;)一起使用时,它显示为连字符。否,实体
    表示一个破折号。它基于windows-1252,因此在技术上是不正确的,但出于历史原因,浏览器支持它。根据其Unicode代码点,en-dash的正确数字实体为
    hex.Alan,我对你的评论“技术上不正确,但浏览器支持它是出于历史原因”感到非常不安。HTML实体的数字代码中有多少错误的映射?如果我想在HTML中建立一个,呃,警戒区怎么办。。。好吧,没关系。但是,如果你能给我指一下这些东西的清单,我将不胜感激。如果你能断言有一个列表,我会打开一个问题问它在哪里。我不知道是否有一个详尽的列表,但看看。
    U+0080..U+009F
    范围内的所有字符都被描述为控制字符,因此这些行的“浏览器”列应为空。相反,您会看到可显示的字符,如
    ƒ
    ,即使页面用作UTF-8。如果查看页面源代码,您将看到这是因为字符是以数字实体的形式写入的(
    &&x0083;
    &&x0089;
    )。