我正在使用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
答案 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)。我们处理这个的方式是:
然后至少我们只担心这些字符的Unicode解释是什么。