【问题标题】:wkhtmltopdf html url encoding (german umlaut)wkhtmltopdf html url 编码(德语变音符号)
【发布时间】:2015-03-24 09:51:27
【问题描述】:

在 linux 控制台上对以下 .pdf 转换进行编码失败并显示“ContentNotFoundError”

wkhtmltopdf --page-size A4 --encoding utf-8 --viewport-size 1024x768 http://localhost/möja.html /tmp/test.pdf

在启用 UTF-8 字符集的 lynx 中出现同样的问题:

The requested URL /möja.html was not found on this server.

语言环境设置为 utf-8。控制台正在正确输入德语特殊字符。

LANG=de_DE.UTF-8
LANGUAGE=
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=

通过浏览器和开发系统上的 wkhtmltopdf 访问页面(相同的 debian wheezy 发行版)按预期工作。如果 url 中没有德语特殊字符,则可以很好地创建 pdf。我找不到任何差异。

感谢您的每一个提示!

【问题讨论】:

    标签: encoding utf-8 wkhtmltopdf


    【解决方案1】:

    显然 服务器 不希望看到 UTF-8 编码的字符,它可能希望看到 Latin-1。 URL 不能以包含非 ASCII 字符开头。根据预期的字符编码,以百分比编码对 URL 中的变音符号进行编码。 Latin-1 (ISO-8859-1) 百分比编码版本将是:

    http://localhost/k%F6nig.html
    

    【讨论】:

    • 感谢您的重播。在我的开发系统上,我不必对 uri 进行编码。下面的 bash 命令在这里起作用:lynx localhost/könig.html。在我的生产系统上,即使是 lynx 界面也没有显示变音符号。
    • Web 服务器接收到这个 URL 并且必须在其磁盘上查找与文件名匹配的文件。文件系统如何处理非 ASCII 字符很大程度上取决于文件系统。在某些系统上,文件名可能是 UTF-8 编码,在其他系统上是 UTF-16,在其他系统上,它们会有一些复杂的代码页。 URL 的编码需要与磁盘上文件的编码相匹配(除非服务器上有一些中间层以不同方式处理)。这完美地解释了为什么它适用于一个系统而不是另一个系统。它还解释了为什么应该避免在 URL 中使用非 ASCII 字符。
    • 谢谢,但是在类 Unix 系统上,文件名的编码不是在文件系统级别设置的,而是在用户环境中设置的。
    • 我认为我的配置肯定有问题,因为如果我将localt更改为'de',即使lynx系统界面也无法显示正确的拉丁字符
    • URL 将作为百分比编码字符串发送,即使您在命令行中键入“ö”也是如此。百分比编码的方式取决于您的语言环境和控制台设置。您在控制台中键入“ö”,它将根据您的控制台设置以某些特定字节表示,这些字节将由设置的语言环境进行解释,然后通过 curl 将其编码为%xx%xx。服务器接收到代表字节的%xx%xx,并尝试在其磁盘上的文件名中查找具有相同字节的文件名。它失败了。语言环境与服务器无关。 URL 没有语言环境。
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 2021-07-08
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 2016-04-25
    相关资源
    最近更新 更多