有没有一种方法可以通过放置'\';在python的字符串前面?
下面是打印unicode的常规方法有没有一种方法可以通过放置'\';在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 下一步我该怎么做,让这个输出成为下标₀ ?
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你是对的。加法是最好的方法。我在这里介绍这两种选择。