【问题标题】:How do I have a unicode source code affect the whole string instead of just the first character?如何让 unicode 源代码影响整个字符串而不仅仅是第一个字符?
【发布时间】:2018-11-21 12:19:17
【问题描述】:

我正在 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'C\u0304M\0304'有什么原因吗?
  • @IgnacioVazquez-Abrams 我之前尝试过,但我会得到 C̄M4。不知道怎么回事
  • 确定它看起来像C̄M吗?我会期待CM̄
  • @MartinBonner 哦,对不起,你是对的,我会编辑我的帖子。

标签: python python-3.x unicode utf


【解决方案1】:

组合宏 (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 可以。)

【讨论】:

    猜你喜欢
    • 2020-05-06
    • 2019-11-05
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多