进行一些unicode测试,遇到了一个我无法克服的错误。
# -- coding: utf-8 -- Enable direct Unicade-8 encoding
# Imports #
from __future__ import print_function
import locale
from unicodedata import *
locale.setlocale(locale.LC_ALL, '') # Set the locale for your system 'en_US.UTF-8'
def main():
xlist=[]
for i in range(9729, 9731):
xlist.append(eval('u"\\u{:04x}"'.format(i)))
for x in xlist:
#print(name(u' ','-'))
if name(x,'-')!='-':
#print("{} | {:04x} | {}".format(x, ord(x), name(x,'-'))) #1
print( x,'|', "%04x"%(ord(x)), '|', name(x,'-')) #2
if __name__ == '__main__':
main()
运行正常。但是当我改为尝试使用标记为#1而不是数字#2的打印行进行打印时,我收到此错误:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2601' in position 0: ordinal not in range(128)
我已经研究过这个错误,但它似乎与我的格式有关。但是,#1中的格式与#2中的格式相同或非常相似。
任何帮助将不胜感激。 感谢。
答案 0 :(得分:2)
将格式化模式转换为uniode字符串。
print(u"{} | {:04x} | {}".format(x, ord(x), name(x,'-')))