【问题标题】:Why is rst2html5 messing up encodings?为什么 rst2html5 会搞乱编码?
【发布时间】:2018-11-28 09:46:22
【问题描述】:

我有一个 Python 程序,它是用 UTF-8 编写的,由 PyCharm 和 Sublime Text 确认。它将井号字符£ (0xC2 0xA3) 打印到重新结构化的文本中:

使用 PyCharm 和 Sublime Text 打开 reStructured Text 文件看起来不错,并且都声称它是 UTF-8。

当我使用rst2html5从这个文件中生成HTML时,问题就出现了:

 rst2html5 --input-encoding=utf-8 --output-encoding=utf-8 foo.rst > foo.html

HTML 通过<meta charset="utf-8" /> 声称是UTF-8,但井号字符£ 现在显示为┬ú。在 Sublime Tex 中以 UTF-8 格式打开它也会显示 ┬ú 而不是 £。这是实际数据:

任何想法发生了什么或如何阻止它?这看起来像 UTF-8 吗?

生成的文件是这样开始的:

0xFF 0xFE 让我想起了UTF-16 BOM,但将标头设置为 <meta charset="utf-16" /> 并不能解决问题,并且告诉文本编辑器以 UTF-16 格式打开文件仍然显示非 ASCII 字符损坏。

如果相关,我的活动 Windows 代码页是 437。

【问题讨论】:

  • “要求”但不是吗?还是真的?用于编码 £ 字符的十六进制字节是什么?在 UTF-8 中,应该是 0xC2 0xA3。
  • 您是在本地查看 HTML 文件吗?它是否具有标识其编码的http-equiv 标头?如果您从 Web 服务器查看它,服务器附加了哪些标头?
  • @tripleee:我知道字体会对不常见的字符产生影响,但几乎每种字体,当然每种默认字体都包含井号字符。
  • @tripleee:我阅读了该页面。你要求十六进制表示,我明白了。我仍然没有看到你关于字体的观点。当我将 utf-8 指定为输入和输出时,rst2html5 遇到 0xC2 0xA3 时没有输出 0xC2 0xA3,并且字体在那里无效。
  • @AKX 2C25FA00 仍然远未达到 UTF-16 中 £ 的正确编码,因此即使这样也无济于事。

标签: python windows powershell character-encoding


【解决方案1】:

问题是由 PowerShell 重定向引起的,而不是由 rst2html5 本身引起的。像这样运行它:

 rst2html5 --input-encoding=utf-8 --output-encoding=utf-8 foo.rst foo.html

与重定向 (>) 效果相同,效果很好,在 CMD 上使用重定向也效果很好。

如果有人有更多关于 PowerShell 为何弄乱编码的信息,最好在此处添加。

【讨论】:

    猜你喜欢
    • 2014-10-11
    • 2017-07-12
    • 2013-06-03
    • 2014-02-08
    • 2012-09-02
    • 1970-01-01
    • 2014-03-13
    • 1970-01-01
    • 2011-03-13
    相关资源
    最近更新 更多