【问题标题】:Do critical characters of a python encoding ever come outside of quotes?python 编码的关键字符是否出现在引号之外?
【发布时间】:2015-06-04 10:41:48
【问题描述】:

我正在处理python scanner library 并遇到了编码。我想,词法扫描器永远不会遇到“关键”字符的问题,因为它们总是出现在带引号的字符串中。 IE。在 unicode 中,额外字符的格式为

   0x00000000 - 0x0000007F:
       0xxxxxxx

   0x00000080 - 0x000007FF:
       110xxxxx 10xxxxxx

   0x00000800 - 0x0000FFFF:
       1110xxxx 10xxxxxx 10xxxxxx

   0x00010000 - 0x001FFFFF:
       11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

   0x00200000 - 0x03FFFFFF:
       111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

   0x04000000 - 0x7FFFFFFF:
       1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

,因此代码始终高于 x80:它们不会与 ' 和 " 混合使用。 我不必关心编码。我说的对吗?

参考资料: https://www.python.org/dev/peps/pep-0263/ https://docs.python.org/2/tutorial/interpreter.html#source-code-encoding

【问题讨论】:

    标签: python compiler-construction grammar lexical-analysis


    【解决方案1】:

    还有其他编码,这个简单的假设不正确。对于大多数单字节编码,这似乎是正确的,但对于除 utf-8 以外的大多数多字节编码,这肯定是错误的。

    【讨论】:

    • 谢谢!我确信 utf-8 和 ISO/IEC 8859(15 套)无需更改即可处理 python 源。对于其他编码,我将不得不进一步检查。
    【解决方案2】:

    您似乎认为奇怪编码的字符只出现在字符串中。

    我希望 Python 允许在标识符中使用 Unicode 字符。那么一个 UTF-8 编码的文件(这显然是你在这里展示的)在标识符中会有这样的序列。

    我认为您也犯了一个错误,即只有 UTF-8 可用作编码。我不知道在日本使用了多少 Python,但如果是的话,我希望会普遍使用 SHIFT-JIS(多字节字符)编码。

    您还需要担心奇怪的字符代码。例如,Unicode 中的 0x85 是“换行符”字符。你应该把它当作换行符吗?更麻烦的是,如果您有其他字符编码(有几十个),您会使用 0x85 作为字符代码,但这不会使其成为 Unicode NEL。

    最后你遇到了检测字符集的问题。 Python 可以在文件开头的源文件注释中显式指定它,但它也可能是隐式的。这也可能令人惊讶;显然有一个 Python 版本移植到 IBM System Z 大型机;在那个世界中,EBCDIC 是首选字符集,代码 0b10xxxxxx 对应于您认为的小写字母。

    在源文件中处理字符编码真的很痛苦,如果你想把它做好,没有简单的答案。

    我的公司构建了处理计算机源代码的工具(请参阅简介)。我们的处理方式是:

    • 在读取文件之前确定字符编码 (有时通过预读文件,例如,嗅探 UTF-8)
    • 读取文件并将所有代码转换为(16 位)Unicode。

    那么至少我们只需要担心这些字符的 Unicode 解释是什么。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-05-28
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 2013-07-11
      • 1970-01-01
      • 2010-12-04
      相关资源
      最近更新 更多