Python “反规范化” Unicode 组合字符
我想在Python中对一些Unicode文本进行标准化。我在想有没有简单的方法可以得到一个组合Unicode字符的“非标准化”形式?比如说,如果我有这个序列u'o\xaf'
(也就是拉丁小写字母o
后面跟着组合长音符
),我想得到ō(带长音符的拉丁小写字母o
)。反向操作就简单多了:
o = unicodedata.lookup("LATIN SMALL LETTER O WITH MACRON")
o = unicodedata.normalize('NFD', o)
2 个回答
4
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后把它放到另一个地方。这就像是把书从一个书架搬到另一个书架一样。
有些时候,我们会遇到一些问题,比如数据的格式不对,或者我们需要对数据进行一些处理才能使用。这就像是你在搬书的时候,发现有些书是倒着放的,你需要把它们翻过来才能放到新的书架上。
在这个过程中,我们可能会用到一些工具或者方法来帮助我们完成这些任务。就像搬家时,你可能会用到手推车来搬重的东西,这样会轻松很多。
总之,处理数据就像是搬书一样,需要一些技巧和工具,才能把它们放到正确的位置,方便我们使用。
o = unicodedata.normalize('NFC', o)
5
正如我之前提到的,U+00AF 不是一个组合的长音符。不过,你可以通过 NFKD 转换把它变成 U+0020 和 U+0304。
>>> unicodedata.normalize('NFKD', u'o\u00af')
u'o \u0304'
然后你可以去掉空格,使用 NFC 得到 ō。
(注意,NFKD 在分解时比较激进,有些语义可能会丢失——任何“兼容”的字符都会被分开。例如:
'½'
(U+008D) 变成'1'
'⁄'
(U+2044)'2'
;'²'
(U+00B2) 变成'2'
'①'
(U+2460) 变成'1'
等等。)