考虑一下:
TypeError: __getattr__() takes exactly 1 argument (2 given)
我得到了
▙
像这样的东西,这就是我需要的东西
但是当我尝试在这样的循环中运行它时:
print u'\u2599'
我只得到一个输出:
for i in range(2500,2600):
str1 = """u\'\\u""" + str(i) + '\''
print str1
如何让代码在循环中正确打印Unicode值?
我尝试从cmd提示符中捕获打印输出,但它显示错误:
u'\u2500'
u'\u2501'
u'\u2502'
u'\u2503'
u'\u2504'
u'\u2505'
u'\u2506'
u'\u2507'
u'\u2508'
u'\u2509'
u'\u2510'
u'\u2511'
u'\u2512'
u'\u2513'
u'\u2514'
(我研究过,可能是因为打印命令)。
答案 0 :(得分:5)
您会混淆文字语法及其产生的值。您无法生成值并期望将其视为文字,与生成'1' + '0'
的字符串不会产生整数10
的方式相同。
使用unichr()
function将整数转换为Unicode字符,或使用unicode_escape
编解码器将包含Python文字语法的字节串解码为Unicode字符串:
>>> unichr(0x2599)
u'\u2599'
>>> print unichr(0x2599)
▙
>>> print '\\u2599'
\u2599
>>> print '\\u2599'.decode('unicode_escape')
▙
您还缺少\uhhhh
语法使用十六进制数字的重要细节。 2500
十进制为十六进制的9C4
,十六进制的2500
为十进制的9472。
要生成您的值范围,您希望使用0xhhhh
Python文字表示法生成0x2500十六进制和0x2600十六进制之间的序列:
for codepoint in range(0x2500, 0x2600):
print unichr(codepoint)
因为使用Unicode代码点时更容易阅读和理解。
答案 1 :(得分:1)
为什么你这样做呢?
如果您尝试打印该范围内的代码点,则应执行以下操作:
for i in range(0x2500,0x2600):
print unichr(i)
您在上面的代码中所做的只是构建一个字符串,其中包含文字“\ u”和一个数字......
答案 2 :(得分:1)
for i in range(0x2500, 0x2600):
print unichr(i)
答案 3 :(得分:0)
In [9]: for i in range(2500,2503):
a="\\u"+str(i)
print a.decode('unicode-escape')
...:
─
━
│