为什么⟨和⟩字符的处理方式如此奇怪?

时间:2015-06-12 03:02:37

标签: html character

http://www-archive.mozilla.org/newlayout/testcases/layout/entities.html有一个名为" Miscellaneous Technical"的部分。该部分中包含的两个字符是"左指角支架" (⟨〈)和"右指角括号" (⟩〉)。这些角色有一些奇怪的东西(下面列表中的前三个项目是在我的第一代运行Android 4.4.4的Moto X上测试的):

  1. 在Android上的Chrome 43.0.2357.93中,所有四个实体(⟨〈⟩〉)都是不可见的(它们看起来像空格)。
  2. 在Android上的Opera 30.0.1856.92967中,所有四个实体都是不可见的(它们看起来像空格)。
  3. 在Android上的Firefox 38.0.5中,两个命名实体(⟨⟩)看起来像黑色块,但是两个编码实体(〈〉 )看起来正确。
  4. 我使用Xcode的iOS模拟器来模拟运行iOS 8.3(12F69)的iPhone 5s。然后我在Safari中加载了链接。所有四个实体看起来都是正确的,但两个命名实体(⟨⟩)看起来与两个编码实体(〈〉)非常不同。
  5. 如果您将页面转换为HTML5并通过the validator运行,则会输出" 警告:文本运行不在Unicode规范化表单C中。"关于两个编码实体(〈〉),但整个页面上没有其他实体收到任何警告或错误。
  6. 我认为上面列表中最有趣的项目是最后三项,因为看起来命名实体和编码实体没有得到同等对待。

    所有其他角色看起来都很好,至少从我看到的情况来看。是什么让这些角色如此奇怪?

    这是"杂项技术"来自此问题顶部链接的部分,以防链接永远停止工作:

    <h3>Miscellaneous Technical</h3>
    
    <table>
      <caption align=bottom>
        [1] lang is NOT the same character as U+003C 'less than' or U+2039 'single left-pointing angle quotation mark'<br>
        [2] rang is NOT the same character as U+003E 'greater than' or U+203A 'single right-pointing angle quotation mark'
      </caption>
      <tr>
        <th>Entity</th>
        <th>Code</th>
        <th>Named</th>
        <th>Coded</th>
        <th>Description</th>
      </tr>
      <tr>
        <td>lceil</td>
        <td>8968</td>
        <td>"&lceil;"</td>
        <td>"&#8968;"</td>
        <td>left ceiling = apl upstile</td>
      </tr>
      <tr>
        <td>rceil</td>
        <td>8969</td>
        <td>"&rceil;"</td>
        <td>"&#8969;"</td>
        <td>right ceiling</td>
      </tr>
      <tr>
        <td>lfloor</td>
        <td>8970</td>
        <td>"&lfloor;"</td>
        <td>"&#8970;"</td>
        <td>left floor = apl downstile</td>
      </tr>
      <tr>
        <td>rfloor</td>
        <td>8971</td>
        <td>"&rfloor;"</td>
        <td>"&#8971;"</td>
        <td>right floor</td>
      </tr>
      <tr>
        <td>lang</td>
        <td>9001</td>
        <td>"&lang;"</td>
        <td>"&#9001;"</td>
        <td>left-pointing angle bracket = bra [1]</td>
      </tr>
      <tr>
        <td>rang</td>
        <td>9002</td>
        <td>"&rang;"</td>
        <td>"&#9002;"</td>
        <td>right-pointing angle bracket = ket [2]</td>
      </tr>
    </table>
    

1 个答案:

答案 0 :(得分:1)

根据HTML5 specification命名字符引用(实体)的编码方式与HTML 4规范(在问题中引用)不同。

&lang;为U + 027E8(&#10216;

&rang;为U + 027E9(&#10217;

在实践中,现代浏览器似乎遵循HTML5方法,即使对于具有HTML 4 doctype的文档也是如此。它解释了显示&lang;&#9001;

的区别

事实&lang;&rang;未在移动浏览器中正确呈现可能是因为字体缺乏支持。