Python中Unicode字符的显示问题(组合字符、假名字符等)。

3

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

2个回答

3
您可以将组合重音标准化为组成形式,例如 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上我不确定要使用什么。

你猜错了,字体没有问题。点赞者没有进行验证。 - daxim
关于字体的评论是为了解决用户在问题中提到的“问号符号在方框中”的原因。已编辑以澄清。 - wim

-1
这与编程毫无关系。只需移除损坏的终端仿真器,并安装一些可以正常工作的东西,例如ConEmu


那么,无论我怎么做,我的计算机上的内置命令提示符都无法正确显示字符?我使用的文本编辑器(Atom)也是如此吗? - Diogenes

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