在Python中预合成Unicode字符序列

2024-09-30 01:33:02 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使用本机python2.5+函数转换分解后的unicode字符序列,如“拉丁小写字母E”+“组合锐音符”(或U+0075+U+0301),使其成为预合成形式:“带锐音符的拉丁小写字母E”(或U+00E9)?在

如果重要的话,我在macosx(10.6.4)上,我已经看到了问题Converting to Precomposed Unicode String using Python-AppKit-ObjectiveC,但不幸的是,虽然描述的OS X本机CoreFoundation函数CFStringNormalize没有失败或停止脚本执行,但它什么也做不了。 我并不是说它不返回任何东西(它的返回类型是void—它在适当的地方发生了变异)。我还尝试了常量参数的所有可能值,该参数指定以规范或非规范形式进行预合成或分解。在

这就是为什么我在寻找一个Python本地方法来处理这个问题。在

非常感谢您的阅读!在

安德烈


Tags: to函数规范参数stringunicode序列字符
1条回答
网友
1楼 · 发布于 2024-09-30 01:33:02
import unicodedata as ud

astr=u"\N{LATIN SMALL LETTER E}" + u"\N{COMBINING ACUTE ACCENT}"
combined_astr=ud.normalize('NFC',astr)

“NFC”告诉ud.normalize应用规范分解(“NFD”),然后 组合预组合字符:

^{pr2}$

它们都打印相同:

print(astr)
# é
print(combined_astr)
# é

但他们的代表不同:

print(repr(astr))
# u'e\u0301'
print(repr(combined_astr))
# u'\xe9'

它们的编码,比如说utf_8,也(毫不奇怪)不同:

print(repr(astr.encode('utf_8')))
# 'e\xcc\x81'
print(repr(combined_astr.encode('utf_8')))
# '\xc3\xa9'

相关问题 更多 >

    热门问题