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

How do I have a unicode source code affect the whole string instead of just the first character?

我正在 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̄。)

有没有办法在将所有内容保存在一个索引中的同时更正此问题?

组合宏指令 (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 没有任何内容,我不知道它们的历史如何(这可能取决于您谈论的时间和地点)。还有 u'\u2180' (ↀ) 作为替代 1000。(结合 macron 可以使用它。)