Kit*_*Kit 154 python string unicode python-2.x
我使用的是Python 2.6.5.我的代码需要使用"超过或等于"的符号.在这里:
>>> s = u'\u2265'
>>> print s
>>> ?
>>> print "{0}".format(s)
Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2265'
in position 0: ordinal not in range(128)`
Run Code Online (Sandbox Code Playgroud)
为什么我会收到此错误?有没有正确的方法来做到这一点?我需要使用该.format()功能.
Mad*_*ist 241
只需使第二个字符串也成为unicode字符串
>>> s = u'\u2265'
>>> print s
?
>>> print "{0}".format(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2265' in position 0: ordinal not in range(128)
>>> print u"{0}".format(s)
?
>>>
Run Code Online (Sandbox Code Playgroud)
Ign*_*ams 69
unicode需要unicode格式字符串.
>>> print u'{0}'.format(s)
?
Run Code Online (Sandbox Code Playgroud)
关于为什么会发生这种情况的更多信息。
>>> s = u'\u2265'
>>> print s
Run Code Online (Sandbox Code Playgroud)
之所以有效,是因为print自动为您的环境使用系统编码,该编码可能设置为 UTF-8。(你可以通过做来检查import sys; print sys.stdout.encoding)
>>> print "{0}".format(s)
失败是因为format尝试匹配调用它的类型的编码(我找不到关于此的文档,但这是我注意到的行为)。由于字符串文字是在 python 2 中编码为 ASCII 的字节字符串,因此format尝试编码s为 ASCII,然后导致该异常。观察:
>>> s = u'\u2265'
>>> s.encode('ascii')
Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2265' in position 0: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
所以这基本上就是这些方法起作用的原因:
>>> s = u'\u2265'
>>> print u'{}'.format(s)
?
>>> print '{}'.format(s.encode('utf-8'))
?
Run Code Online (Sandbox Code Playgroud)
源字符集由编码声明定义;如果源文件中没有给出编码声明,则它是 ASCII(https://docs.python.org/2/reference/lexical_analysis.html#string-literals)
| 归档时间: |
|
| 查看次数: |
83883 次 |
| 最近记录: |