如何将Unicode下标与字符串格式化相结合

3
我正在尝试使用字符串格式化实现Unicode下标... 我知道可以像这样做...
>>>print('Y\u2081')
Y₁
>>>print('Y\u2082')
Y₂

但我实际需要的是这样的东西,因为我需要下标来遍历一个范围。显然,这并不起作用。
>>>print('Y\u208{0}'.format(1))
  File "<ipython-input-62-99965eda0209>", line 1
    print('Y\u208{0}'.format(1))
         ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 1-5: truncated \uXXXX escape

希望得到您的帮助


相关:在Python中打印下标 - smci
1个回答

3

\uhhhh是字符串文字中的转义语法。您需要生成原始字符串(其中忽略了转义语法),然后重新应用正常的Python解析器处理转义:

import codecs

print(codecs.decode(r'Y\u208{0}'.format(1), 'unicode_escape'))

然而,最好使用chr()函数来生成整个字符:
print('Y{0}'.format(chr(0x2080 + 1)))

chr()函数接受一个整数并输出相应的Unicode代码点字符串。上述定义了一个十六进制数字,并加1以生成所需的2080范围的Unicode字符。


1
这不适用于上标;Unicode 上标不是连续的块。 - taylor swift
1
@Kelvin:我甚至没有考虑上标的问题。 - Martijn Pieters
对我有用... ['Y{0}'.format(chr(0x2080 + i)) for i in range(10)] Out[74]: ['Y₀', 'Y₁', 'Y₂', 'Y₃', 'Y₄', 'Y₅', 'Y₆', 'Y₇', 'Y₈', 'Y₉'] - asdf
@Kelvin:对于数字 09,它将正常工作。 - Martijn Pieters
1
是的,对于下标它会生效。只是要指出大多数“特殊变体”并不像这样工作得那么好。例如,上标就不行。数学斜体也不行,因为Unicode联盟决定在完全不同的位置编码“h”,这是一个非常奇怪的原因。假设您可以使用chr()以可预测的方式向上计数将产生愚蠢且难以检测的错误。 - taylor swift
1
@Kelvin:在这种情况下,手动字典是解决之道。但在这里,它并不需要。 - Martijn Pieters

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接