首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >规范外文

规范外文
EN

Stack Overflow用户
提问于 2020-03-26 01:02:19
回答 1查看 30关注 0票数 0

通常,我使用unicodedata来规范其他拉丁语文本。然而,我遇到了这样的情况,不知道该做什么:

代码语言:javascript
运行
复制
s = 'Nguyễn Văn Trỗi'
>>> unicodedata.normalize('NFD', s)
'Nguyễn Văn Trỗi'

还有另一个模块可以比unicodedata规范更多的口音吗?我想要的输出是:

Nguyen Van Troi

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-26 02:14:04

normalize并不意味着“删除重音”。它是在组合形式和分解形式之间进行转换:

代码语言:javascript
运行
复制
>>> import unicodedata as ud
>>> a = 'ă'
>>> print(ascii(ud.normalize('NFD',a)))  # LATIN SMALL LETTER A + COMBINING BREVE
'a\u0306'
>>> print(ascii(ud.normalize('NFC',a)))  # LATIN SMALL LETTER A WITH BREVE
'\u0103'

删除它们的一种方法是将分解后的表单编码为ASCII忽略错误,这是因为组合字符不是ASCII。但是请注意,并不是所有的国际字符都分解了表单,比如đ。

代码语言:javascript
运行
复制
>>> s = 'Nguyễn Văn Trỗi'
>>> ud.normalize('NFD',s).encode('ascii',errors='ignore').decode('ascii')
'Nguyen Van Troi'

>>> s = 'Ngô Đình Diệm'
>>> ud.normalize('NFD',s).encode('ascii',errors='ignore').decode('ascii')
'Ngo inh Diem' # error

您可以使用翻译表来处理异常:

代码语言:javascript
运行
复制
>>> table = {ord('Đ'):'D',ord('đ'):'d'}
>>> ud.normalize('NFD',s).translate(table).encode('ascii',errors='ignore').decode('ascii')
'Ngo Dinh Diem'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60859596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档