为什么某些字符在 Chrome 中显示为正方形?

Mat*_*Mat 33 arch-linux character-encoding chrome fonts

例如,在开发工具中,我得到类似的信息:

Chrome 开发工具

其中一些方块位于行尾,最初我以为它们是回车,但事实证明它们不是。

此外,广场出现后=>在许多地方没有换行,并期待在十六进制编辑器显示该文件不存在根本之间的任何字符="(例如id="被显示为id=? "

这也偶尔出现在网页中,例如我看到:

谷歌搜索结果

我复制了那句话,在十六进制编辑器看着它,并再次之间不存在性格e:。源代码中也没有显示任何内容。

我以前从未见过这种情况,这是我几天前重新安装 arch 之后才出现的。

Chrome 是:版本19.0.1084.15 dev
Arch 是: Kernel 3.3.1-1-ARCHx86_64

locale.genen_GB取消注释语言环境(UTF-8ISO-8859-1)。chrome 中的编码默认为ISO-8859-1,但将其切换为UTF-8没有区别。

这是我使用的 html 文件:test.html

修复会很棒,解释会很棒,确认这只是(或不是)我的设置有问题也很好。

编辑:在调查字体后,我发现在这两种情况下它都试图使用 arial,它在 arch 中是ttf-ms-fonts包的一部分。安装它会导致字体发生变化,但方块仍然存在(尽管形状不同)。在这两种情况下,字体都不符合系统的默认字体。

Chrome 开发工具 - 带有 arial

小智 26

这为我解决了问题。安装 dejavu 字体。

sudo pacman -S ttf-dejavu
Run Code Online (Sandbox Code Playgroud)

  • 2020年仍然有效。 (3认同)
  • 美丽 - 这也解决了我的问题。 (2认同)

l0b*_*0b0 8

打印Unicode 替换字符代替当前字体中不存在的字符是标准的。

一个可能的解决方法是更改​​您的操作系统(如果浏览器继承操作系统设置)或浏览器的默认字体。例如,我在 Ubuntu 11.10 上的 Firefox 11.0 使用的是“serif”字体(这可能是FreeSerif的同义词),它似乎支持很多 Unicode 字符。

PS:图片好像消失了。

  • `这导致了变化:正方形现在是不同的形状`很抱歉我当时笑得太厉害了。 (11认同)

Kyl*_*yle 8

有更好的方法来确定您缺少哪种字体,而不是盲目安装字体包。

例如,我执行以下操作来解决丢失的字体:

  1. 我收到一封电子邮件,其中包含两个未知的 Unicode 字符(代码点:U+1F44B, U+1F3FC
  2. 将它们粘贴到此处:https : //www.fontspace.com/unicode/analyzer#e=8J-Ri_Cfj7w
  3. 查看将向您显示具有这些表情符号/字符的字体的结果
  4. 只安装需要的字体包,对我来说是pacman -S noto-fonts-emoji有效的。
  5. 重建字体缓存 fc-cache -vf
  6. 重启 Chrome/Chromium

或者,您可以查找 Unicode 名称以帮助在 Google 搜索中查找字体:

$ echo -e  | python -c 'import unicodedata, sys; s=sys.stdin.read().rstrip(); print([{ascii(c): unicodedata.name(c)} for c in s])'
[{"'\\U0001f44b'": 'WAVING HAND SIGN'}, {"'\\U0001f3fc'": 'EMOJI MODIFIER FITZPATRICK TYPE-3'}]
Run Code Online (Sandbox Code Playgroud)

你也可以让 Python 从 stdin 读取。为此,运行不带 的脚本echo ... |,复制粘贴未知的 Unicode 字符,按 Enter 和 CTRL-D 关闭stdin,python 将返回结果。


小智 7

noto从谷歌安装字体,为我做的。

yay -S noto-fonts
Run Code Online (Sandbox Code Playgroud)

现在,重新加载字体缓存:

fc-cache -vf
Run Code Online (Sandbox Code Playgroud)