【问题标题】:Why are the ⟨ and ⟩ characters handled so oddly?为什么 〈 和 〉 字符处理得如此奇怪?
【发布时间】:2015-08-27 23:15:32
【问题描述】:

http://www-archive.mozilla.org/newlayout/testcases/layout/entities.html 有一个名为“杂项技术”的部分。该部分中包含的两个字符是“左尖括号”(⟨〈)和“右尖括号”(⟩〉)。这些字符有一些奇怪的地方(以下列表中的前三项是在我运行 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 中”。关于这两个编码实体(〈〉),但整个页面上没有其他实体收到任何警告或错误。

我认为上面列表中最有趣的项目是最后三个,因为命名实体和编码实体似乎没有得到同等对待。

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

这是此问题顶部链接中的“杂项技术”部分,以防万一链接停止工作:

<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>

【问题讨论】:

  • 我怀疑我们会在这里进入一些历史/杂项。关于标准化有一些奇怪的问题。更多的是“因为有人坐在桌前这么说”的问题,而不是代码问题
  • 在我 Mac 上的 Chrome 中,&amp;lang;10216,而不是 9001。&amp;rang; 和 9002 也是如此。i.stack.imgur.com/R73tO.png
  • “它们显示为空格”问题是否是由于缺乏字体支持引起的?
  • 〈和〉是“数学角括号”,但是 〈和 〉是“指向角括号”。
  • 如果您使用 UTF-8 编码,在日语中有 2 个非常相似的符号:〈〉和《》,它们应该在所有浏览器中正确显示(假设它们至少有一种 unicode 字体)。它们的实体是:〈〉和《》 (这不能回答 OP 的问题,但可能会有所帮助)。

标签: html character


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-21
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    相关资源
    最近更新 更多