网络浏览器是否具有 Unicode 字符文件或者它们从操作系统继承这些文件?

网络浏览器是否具有 Unicode 字符文件或者它们从操作系统继承这些文件?

如果我们创建至少一个具有至少一种字体集的新角色,我们必须在浏览器中包含任何字符文件和任何字体文件文件树并在浏览器源代码中声明这些文件。

由于网络浏览器“自动”识别 Unicode 字符及其字体集,我询问网络浏览器是否有 Unicode 字符文件及其字体文件在他们中或者网络浏览器继承这些来自操作系统吗?

答案1

一般来说,浏览器不会自行进行字符整形,而是依靠操作系统及其安装的字体。字符整形是一个过于庞大的课题,任何浏览器都无法投入所需的人力。Unicode 联盟维护的 Unicode 标准定义了 144,697 个字符,涵盖 159 种现代和历史脚本,以及符号、表情符号和非视觉控制和格式代码。

浏览器避免了传统编码的限制,因为 HTML 的设计使得可以使用形式为的数字字符引用来表示 HTML 文档中整个 Unicode 中的字符&#N;

某些网络浏览器(例如 Firefox、Opera 和 Safari)可以智能地选择字体来显示页面上的每个字符,从而显示多语言网页。只要操作系统中有合适的字体,它们就可以正确显示任何 Unicode 块的组合。

我亲自检查了 Windows 10 计算机上的 Chrome 和 Firefox 的安装,没有发现包含的字体。我只在 Firefox 中找到了字体 TwemojiMozilla.ttf,尽管对于那个 最近的讨论 对其对于现代操作系统的必要性表示怀疑。

参考:

答案2

总体而言,两大浏览器往往采取“中间”路线:它们使用与操作系统相同的外部库,但它们捆绑了自己的复制那个图书馆的。

例如,Chrome 包含一个复制HarfBuzz 字体塑造库的副本、FreeType2 字体渲染库的副本以及 ICU 区域设置数据库的副本。(但是,Linux Chromium 版本通常会专门将其配置为使用操作系统提供的版本。)

然而字体不是浏览器附带的字体。它们始终是共享的操作系统资源。如果页面的 CSS 样式表要求,浏览器可以通过 HTTP 加载非操作系统字体,但它们没有任何内置字体。

现代基于 Unicode 的字体由 Unicode 代码点处理。无需额外翻译 - 页面已包含以代码点形式存储的文本(以 UTF-8 编码),字体文件直接将这些代码点映射到字形。

浏览器可能包含字符地图文件以从旧字符集(如 ISO-8859-X)转换为 Unicode,尽管这通常采用“捆绑 ICU 副本”的形式,而不是直接针对浏览器的代码或数据。(我还没有检查 Mozilla 在这里做了什么——它可能有一些特定的代码。)字符集之间的转换实际上可以通过操作系统代码(例如 libiconv)来完成,但浏览器可能需要一些不会因操作系统而异的东西。

一些东西不过,字符集是浏览器特有的检测代码——Chrome 和 Mozilla 都有代码试图猜测使用众多旧 ISO8859 字符集之一但没有具体指定字符集的旧网页实际使用的字符集。

除此之外,浏览器可能包括它自己的 UTF-8 解码器(这不是“映射”,而只是一种算法转换),因为它是一个相对简单的操作,所以例如 C++ 运行时可能会有它自己的优化版本。

相关内容