如何让unicode源代码影响整个字符串而不仅仅影响第一个字符?

时间:2018-06-12 07:23:43

标签: python python-3.x unicode utf

我在python中创建一个简单的罗马数字转换器并使用它:

    num_values = [(1000000, 'M'+ u'\u0304'),
                  (900000, 'CM'+ u'\u0304'),
                  (100000, 'C'+ u'\u0304'),
                  (90000, 'XC'+ u'\u0304'),
                  (50000, 'L'+ u'\u0304'),
                  (40000, 'XL'+ u'\u0304'),
                  (10000, 'X'+ u'\u0304'),
                  (5000, 'V'+ u'\u0304'),
                  (1000, 'M'),
                  (900, 'CM'),
                  (500, 'D'),
                  (400, 'CD'),
                  (100, 'C'),
                  (90, 'XC'),
                  (50, 'L'),
                  (40, 'XL'),
                  (10, 'X'),
                  (9, 'IX'),
                  (5, 'V'),
                  (4, 'IV'),
                  (1, 'I')]

表示我的函数迭代的值。但是,unicode似乎只影响字符串中的第一个字符。 (例如,'CM'+ u'\u0304'看起来像CM̄而不是C̄M̄。)

有没有办法纠正这个问题,同时将所有内容保存在一个索引中?

1 个答案:

答案 0 :(得分:0)

组合宏(U + 0304)与前面的代码点(仅)相结合。如果你想要两个带有过量栏的字符,你将需要两个组合宏。之一:

'C\u0304M\u0304'

'C' + '\u0304' + M + '\u0304'

如果您使用的是Python 2(不要),则需要u'\u0304'u'C\u0304M\u0304'

可能对Unicode已

这一事实感兴趣
                  (100_000, u'\u2188'),   # ↈ
                  (50_000, u'\u2187'),    # ↇ
                  (10_000, u'\u2182'),    # ↂ

不幸的是,1_000_000没有什么,我也不知道它们的历史(它可能取决于你在何时何地谈论)。还有你' \ u3080' (ↀ)作为替代1000.(结合macron可以使用它。)