有没有一种方法可以通过放置'\';在python的字符串前面?

有没有一种方法可以通过放置'\';在python的字符串前面?,python,unicode,encoding,Python,Unicode,Encoding,下面是打印unicode的常规方法 print('\u2080') 它输出一个下标字符 ₀ 字符串格式提供了一些材料 for i in range(3): print('u208{}'.format(i)) 输出 u2080 u2081 u2082 \u2080 我试图通过在它们前面加一个“\”来生成一个unicode 我想我快到了 print('\\'+'u2080') 输出 u2080 u2081 u2082 \u2080 下一步我该怎么做,让这个输出成为下标₀ ?

下面是打印unicode的常规方法

print('\u2080')
它输出一个下标字符

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

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

u2080
u2081
u2082
\u2080
我试图通过在它们前面加一个“\”来生成一个unicode

我想我快到了

print('\\'+'u2080')
输出

u2080
u2081
u2082
\u2080

下一步我该怎么做,让这个输出成为下标₀ ?

您可以使用
ord
将unicode字符转换为整数,应用转换(根据您所做的操作,位运算符在这里可能很方便),然后使用
chr
将其转换回unicode字符:

>>> print(list(chr(ord('\u2080') | i) for i in range(10)))
['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉']
>>> print(list(chr(0x2080 + i) for i in range(10)))
['₀', '₁', '₂', '₃', '₄', '₅', '₆', '₇', '₈', '₉']
您也可以跳过
命令
,从int改为字符:

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

实际上,只处理字符串,而不必提取代码点的编号并使用
chr
函数,就可以创建相应的unicode字符:

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

在这些转换中有
unicode\u转义
字符。当使用
bytes.decode
方法将bytes对象转换为文本时,可以直接使用它,但也可以使用
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”语法,几乎在Python 3.6中的所有使用中都超过了
.format
方法)

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

将打印:


₀ ₁ ₂ ₃ ₄ ₅ ₆ ₇ ₈ ₉ ₊ ₋ ₌ ₍ ₎ ₏ ₐ ₑ ₒ ₓ ₔ ₕ ₖ ₗ ₘ ₙ ₚ ₛ ₜ

这里不需要使用bitwie操作,因为对于超出最后一位的字符范围,简单的加法将产生一致的结果(如果基字符上的最后一位不是零,则将作为偏移量使用)@jsbueno你是对的。加法是最好的方法。我在这里介绍这两种选择。