mystr = 'aaaa'
myvar = u'My string %s' % str(mystr)
这会成为 future 的问题吗?我搞乱了一些在 Python 中使用电子邮件模块的内部代码,并发现了一些像这样的代码。 mystr
将始终仅包含 ascii 字符,因为它来自包含预定义的仅 ascii 字符的列表。
我没有编写代码,并且使用 str(mystr)
或 mystr
不会改变问题的实质。
完成第一个片段后,我将拥有一个安全的 unicode 对象,或者我必须做
mystr = u'aaaa'
myvar = u'My string %s' % mystr
或
mystr = 'aaaa'
myvar = u'My string %s' % unicode(mystr)
?
(我知道这不是正确的做法,我知道我应该处理异常,我在这里询问只有第一个片段返回一个有效的unicode对象,或者Python是否搞乱了它的内部结构或其他什么时候这样做。)
最佳答案
尝试在字符串中放入实际的 unicode 符号(例如元音变音或西里尔字母),然后观看惨败。 :)
s = 'свят' # world
v = u'здравей %s' % s # hello %s
Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xd1 in position 0: ordinal not in range(128)
问题是,您很可能会对您的应用程序进行编码,并且在一个明亮的日子里,一些俄罗斯人或德国人会写下她的名字,并会突然因具有非 ASCII 符号而收到内部服务器错误
以她的名义。
I know... I'm asking about the situation in my example, using ascii only in
不,不会有任何问题。恕我直言,这是 Python 中的一个错误,因为这是一个 bug,等待着被咬。这本来应该是一个致命的错误,但由于历史原因,我想,事实并非如此。
关于python - 在 python 2.X 中混合 unicode 和 str ...问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6737736/