在循环中打印Unicode元素

时间:2015-05-28 05:48:08

标签: python unicode

考虑一下:

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'

(我研究过,可能是因为打印命令)。

4 个答案:

答案 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')
   ...:     
─
━
│