【问题标题】:How to properly run python script with UTF-16BE encoding?如何使用 UTF-16BE 编码正确运行 python 脚本?
【发布时间】:2018-09-22 03:15:10
【问题描述】:

我有一个以 UTF-16BE 编码的源文件 test.py

# coding=UTF-16BE

print "test utf-16"

当我在 bash 中运行以下命令时:

python test.py

我的终端没有打印出来。这是为什么?我应该如何处理?它是否依赖于我的 bash 的默认编码?

【问题讨论】:

    标签: python python-2.7 unicode encoding


    【解决方案1】:

    你应该使用类似的东西:

    #!/usr/bin/python
    # -*- coding: utf-16be -*-
    

    第一行或第二行(重要的位是coding:=(所以其他答案都可以,如果你放在上面)和编解码器。见@语法为 987654321@。

    您应该检查是否在开头没有 BOM(通用 UTF-16 上允许使用 BOM,但在指定字节顺序时不允许使用 BOM)。编辑经常弄错。

    但总的来说,我建议使用 UTF-8 作为代码编码:编辑器更好地支持它,并且它是 Python3 的默认值。 UTF-8 和 UTF-16 都只是 Unicode 的编码,所以支持应该是一样的。注意:真正的 Python2 将在内部使用类似 UTF16 的编码(UCS2),Python3 动态(每个字符串)选择 UFT-8、UTF-16 或 UTF-32。但忘了内部,这是编辑的问题。

    注意:源编码与执行(运行时)代码无关。读写文件和标准输出的默认编码与代码无关,它们只取决于操作系统和环境。

    【讨论】:

    • 感谢您的回答。你自己试过吗?你提到的两条线对我不起作用..
    • 现在是的,奇怪的是 UTF16 它给了我错误(在解析编码之前),在另一个 UTF16-XE 上我什么都没有。因此,python 似乎不适用于多字节编码(\0 可能会停止源代码)。我正在寻找官方参考资料。
    • 是的,UTF16-BE生成的\0肯定有问题。
    • 评论对 UTF16 不起作用(PEP 链接,“概念”部分,第 1 点,第二段),所以所有答案(也是我的)都不正确。解析器允许更改编码(不确定多字节),但我找不到如何设置它的逻辑(每个文件/模块)[在多字节的情况下]。
    【解决方案2】:

    我一直在四处寻找,终于让bobince's answer in a similar question. 澄清了自己,因为我使用 UTF-16BE 作为我的 python 源代码的编码方案,神奇的评论:

    # coding=UTF-16BE
    

    也以 UTF-16BE 编码。但是,由于 UTF-16BE 不兼容 ASCII,python 无法通过读取 ascii 中的注释来正确检测编码。结果,脚本无法正常运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-14
      • 2017-01-10
      • 2019-01-10
      • 2018-10-25
      • 2015-04-21
      • 2018-07-05
      • 2015-09-14
      • 2019-06-03
      相关资源
      最近更新 更多