2024-09-29 03:29:23 发布
网友
是否有任何lib可以将特殊字符替换为ASCII等效字符,例如:
"Cześć"
致:
"Czesc"
我当然可以创建地图:
{'ś':'s', 'ć': 'c'}
使用一些替换功能。但我不想硬编码所有等价物到我的程序中,如果有一个函数已经这样做了。
#!/usr/bin/env python # -*- coding: utf-8 -*- import unicodedata text = u'Cześć' print unicodedata.normalize('NFD', text).encode('ascii', 'ignore')
我是这样做的:
POLISH_CHARACTERS = { 50309:'a',50311:'c',50329:'e',50562:'l',50564:'n',50099:'o',50587:'s',50618:'z',50620:'z', 50308:'A',50310:'C',50328:'E',50561:'L',50563:'N',50067:'O',50586:'S',50617:'Z',50619:'Z',} def encodePL(text): nrmtxt = unicodedata.normalize('NFC',text) i = 0 ret_str = [] while i < len(nrmtxt): if ord(text[i])>128: # non ASCII character fbyte = ord(text[i]) sbyte = ord(text[i+1]) lkey = (fbyte << 8) + sbyte ret_str.append(POLISH_CHARACTERS.get(lkey)) i = i+1 else: # pure ASCII character ret_str.append(text[i]) i = i+1 return ''.join(ret_str)
执行时:
encodePL(u'ąćęłńóśźż ĄĆĘŁŃÓŚŹŻ')
它将产生如下输出:
u'acelnoszz ACELNOSZZ'
这对我很好-;D
你可以通过这样做来获得大部分的方法:
import unicodedata def strip_accents(text): return ''.join(c for c in unicodedata.normalize('NFKD', text) if unicodedata.category(c) != 'Mn')
不幸的是,有些重音拉丁字母不能分解成ASCII字母+组合标记。你得手动操作。其中包括:
我是这样做的:
执行时:
它将产生如下输出:
这对我很好-;D
你可以通过这样做来获得大部分的方法:
不幸的是,有些重音拉丁字母不能分解成ASCII字母+组合标记。你得手动操作。其中包括:
相关问题 更多 >
编程相关推荐