python编码的关键字符是否超出了引号?

时间:2015-06-04 10:41:48

标签: python compiler-construction grammar lexical-analysis

我正在使用python scanner library并遇到编码。我猜,词法扫描器永远不会出现“关键”字符的问题,因为它们总是出现在引用的字符串中。即在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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

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

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

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

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

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

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

然后至少我们只担心这些字符的Unicode解释是什么。