在 Python 中定义 unicode 变量
Posted
技术标签:
【中文标题】在 Python 中定义 unicode 变量【英文标题】:Defining unicode variables in Python 【发布时间】:2018-02-10 14:08:57 【问题描述】:最近,我一直在阅读有关 Python 源代码编码的信息,尤其是 PEP 263 和 PEP 3120。
我有以下代码:
# coding:utf-8
s = 'abc∂´ƒ©'
ƒ = 'My name is'
ß = '˚ß˙ˆ†ˆ∆ ßå®åø©ˆ'
print('s =', s)
print('ƒ =', ƒ, 'ß =', ß)
此代码适用于 Python3,但在 Python2.7 中会生成 SyntaxError
。
我明白这可能与源代码编码无关。
所以,我想知道是否有办法在 Python2 中支持 Unicode 变量名。
总之,我也很难弄清楚 PEP 究竟要解决什么实际问题,以及我如何(以及在哪里)利用所提出的解决方案。我已经阅读了一些关于相同的讨论,但它们并没有给出我的问题的答案,而是对正确语法的解释:
Correct way to define Python source code encoding Working with utf-8 encoding in Python source Where does this come from: -*- coding: utf-8 -*- Is '# -*- coding: utf-8 -*-' also a comment in Python?【问题讨论】:
【参考方案1】:不,Python 2 仅支持 ASCII 名称。来自the language reference:
identifier ::= (letter|”_”) (letter | digit | “_”)*
letter ::= lowercase | uppercase
lowercase ::= “a”…”z”
uppercase ::= “A”…”Z”
digit ::= “0”…”9”
与更长的Python 3 version 相比,它确实具有完整的 Unicode 名称。
PEP 解决的实际问题是,以前,如果超过 127 的字节出现在源文件中(比如在 unicode 字符串中),那么 Python 无法知道该字符是指哪个字符,因为它可能是任何字符。编码。现在默认解释为UTF-8,可以通过添加这样的header来改变。
【讨论】:
对不起,我无法理解“超过 127 的字节”的含义?你的意思是说一个字符的ASCII码超过127? 是的。 ASCII 定义了字节 0 到 127 的含义。您将看到的几乎所有编码都将这些值编码为与 ASCII 相同。但是超过 127 的值不是 ASCII,通常是不同编码的完全不同的字符。 这是经典文章:joelonsoftware.com/2003/10/08/….【参考方案2】:我不认为这两篇文章是关于编码的,例如你的变量名称是一个 Beta 符号,而是关于变量值的编码。
因此,如果您将代码更改为此示例:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
a = 'abc?´ƒ©'
b = 'My name is'
c = '°ß?ˆ†ˆ? ßå®åø©ˆ'
print 'a =', a # by the way, the brackets are only used in python 3, so they are also being displayed when running the code in python 2.7
print 'b =', b, 'c =', c
希望能回答你的问题
问候 框架
【讨论】:
这将是解决问题而不是解决方案。顺便说一句,我的问题是 Python2 和 Python3 之间的互操作性。 @KshitijSaraogi 你不能指望版本之间有完美的互操作性,有些事情你可以在 Python 3 中做而在 Python 2 中根本做不到。变量名的特殊字符就是其中之一东西。以上是关于在 Python 中定义 unicode 变量的主要内容,如果未能解决你的问题,请参考以下文章
Python—编码与解码(encode()和decode())
有没有一种简单的方法可以让 unicode 在 python 中工作?