有没有办法通过使用python在字符串前面加上“ \”来生成unicode?

时间:2019-06-19 02:19:46

标签: python unicode encoding

这是打印unicode的正常方法。

AC_CHECK_LIB

输出下标字符

print('\u2080')

字符串格式提供了一些素材

输出

for i in range(3):
    print('u208{}'.format(i))

我正在尝试通过在这些字符前面加上'\'来生成unicode。

我想我快到了。

u2080
u2081
u2082

输出

print('\\'+'u2080')

下一步,如何输出下标₀?

2 个答案:

答案 0 :(得分:2)

您可以使用ord将Unicode字符转换为整数,应用转换(根据您的操作,按位运算符可能会很方便),然后使用chr转换回Unicode字符:

>>> print(list(chr(ord('\u2080') | i) for i in range(10)))
['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉']

您还可以跳过ord并将海峡从int转换为character:

>>> print(list(chr(0x2080 + i) for i in range(10)))
['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉']

答案 1 :(得分:0)

实际上,仅使用字符串,而无需提取代码点的编号并使用chr函数,可以创建相应的unicode字符:

stdlib中的模块codecs具有注册和获取文本编解码器的功能:从文本到字节到字节的映射,以及其他一些文本或字节转换。

在这些转换中,有unicode_escape字符。使用bytes.decode方法将字节对象转换为文本时,可以直接使用它,但是也可以使用codecs.getdecoder("unicode_escape")检索它,并将文本转换为文本。

因此可以这样做:

In [139]: import codecs                                                                                                                                

In [140]: esc = codecs.getdecoder("unicode_escape")                                                                                                    

In [141]: for i in range(10): 
     ...:     print(esc(f"\\u208{i}")[0], end=" ") 
     ...:      
     ...:      
     ...:                                                                                                                                              
₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ 

对解码器的调用返回一个元组,其中包含结果和消耗的输入字符数。调用后的[0]仅检索转换后的结果。

(上面,我使用“ f-string”语法取代了.format方法,在Python 3.6中几乎用于所有用途)

通常,人们会更喜欢使用内置的chr,因为它可以避免使用字符串格式,并且可以直接处理数字。 (例如,如果我们希望从某个代码点开始超过16个字符,则上述方法将无法按原样工作。)

print(" ".join(chr(0x2080 + i) for i in range(29)))

将打印:

₂₂p p p p p