【问题标题】:Issues with display of Unicode characters in Python (combining characters, kana characters, etc.)Python 中 Unicode 字符的显示问题(组合字符、假名字符等)
【发布时间】:2020-02-13 15:26:41
【问题描述】:

我正在尝试编写几个程序来处理多种语言的文本分析,包括拉丁语、古希腊语和普通话。其中一个旨在分析拉丁语中的一个单词并将其分解为其组成音节,然后找出哪个音节是重读的,并在该音节的元音上添加一个重音。对于长元音,例如“ā”,这需要使用组合的锐音符“́”来产生“ā́”。但是,当我将组合重音 ('\u0301') 的 unicode 值放在我希望添加到的字符之后的字符串中时,它不会像打印字符串时那样组合字符,而是将它们放在下一个分别给对方。此外,当我尝试显示非西方 Unicode 字符(如日文平假名、片假名或 CJK 统一表意文字)时,我得到的只是系统无法正确显示字符时出现的方框中的问号符号。在其他地方组合字符或 CJK 统一表意文字时,我没有这些问题,因为它们在 Google Chrome 或 Microsoft Word 中工作得很好。我在装有 Windows 10 的 64 位笔记本电脑上运行 Python3。另外,如果他们提出 Sqlite3,我该如何处理这些问题?

【问题讨论】:

    标签: python python-3.x unicode utf-8 python-unicode


    【解决方案1】:

    您可以将组合重音规范化为组合形式,例如 NFC:

    >>> from unicodedata import normalize
    >>> char = 'a'
    >>> accent = '\u0301'
    >>> normalize("NFC", char + accent)
    'á'  # this is a length 1 string
    

    就 ā́ 而言,我认为它在 Python 中的最短长度是 2 ('\u0101\u0301'),这取决于终端仿真器在渲染时正确组合字母的字形和重音符号。

    关于你提到的日文字符渲染不正确的问题(系统无法正确显示字符时出现的问号)这不是编程或编码的问题,你只需要安装适当的字形和字体。在 linux 上我使用 GNU Unifont,我不确定在 Windows 10 上使用什么。

    【讨论】:

    • 你猜错了,字体没有问题。支持者没有验证。
    • 关于字体的评论是为了解决用户看到问题中提到的“框中的问号符号”的原因。编辑澄清。
    【解决方案2】:

    这与编程无关。只需删除损坏的终端仿真器并安装一些有用的东西,例如ConEmu.

    【讨论】:

    • 那么,无论我做什么,我电脑上的内置命令提示符都无法正常显示字符?这同样适用于我使用的文本编辑器(Atom)吗?
    猜你喜欢
    • 2019-02-28
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-24
    相关资源
    最近更新 更多