当我在 Chrome 中访问某个网站时,它可以正常显示非拉丁字符。但是,当我在 Ubuntu Server 上的 Headless Chrome 中运行同一个网站并通过端口 9222 上的调试器查看该网站时,所有字符都显示为空矩形 []。
该问题出现在中文、印度语、阿拉伯语等语言中。
该网站使用 Liberation 字体,并且网站的标头设置为 utf-8 字符集。Liberation 字体安装在 Ubuntu Server 上,并且使用 CSS 从服务器的 webroot 本地加载字体。在常规 Chrome 中,此操作可完美运行,但在无头模式下则不行。
显然,这是一个已知问题,无头 Chrome 无法默认显示非拉丁字符,但到目前为止我还没有找到任何全面的解决方案。
如何让非拉丁字符在无头 Chrome 中工作?最好使用我已经使用的 Liberation 字体。
答案1
我已找到解决这个问题的方法。
Chrome 在无头模式下似乎需要为非拉丁字符安装特定字体。虽然这当然可以通过安装大量字体来解决,但为支持多种语言的网站安装字体会很麻烦。
幸运的是,现在有现代字体包可用,几乎涵盖了地球上所有的语言和文字。我安装了 3 个字体包,现在可以显示许多语言的非拉丁字符。对于印度,我安装了一个特殊的字体包,以覆盖印度的所有语言和文字。我还安装了一个特殊的字体包,涵盖了简体中文、繁体中文、日语和韩语。
以下是解决该问题的 3 个字体包。从上到下,分别是印度字体包、国际字体包和中国、日本和韩国字体包:
sudo apt-get install fonts-indic
sudo apt-get install fonts-noto
sudo apt-get install fonts-noto-cjk
安装这些字体包可以解决问题。而且安装得非常优雅。网站代码中使用的普通拉丁字体仍然有效,但是当无法找到特定语言的字符时,无头 Chrome 会转而使用新安装的字体包。