有没有人知道允许您以智能方式将UTF-8字符串转换为ISO-8859-1编码的Python库?
聪明地说,我的意思是替换像#34; - " by" - "或者。而对于许多人物而言,实际上无法想到它们,请用"?" (比如encode('iso-8859-1', errors='replace')
)。
答案 0 :(得分:1)
我不知道任何现有的库,但Unidecode具有GPL 2许可证,这意味着它可以用作另一个程序的基础。它的主要功能是对所有ASCII码点(低于128)进行特殊处理,使其保持不变。如果您只是将该处理扩展为Latin1字母(代码点低于256),您将获得一个特殊版本,该版本保留Latin1字符并对所有其他字符使用unidecode。
我知道不应该将255以外的字符映射到latin1非ascii字符,这应该可以解决问题。
答案 1 :(得分:1)
libiconv有一个" TRANSLIT"做你想做的功能
答案 2 :(得分:1)
由于Unicode的前256个代码点与ISO-8859-1匹配,因此可以尝试编码为ISO-8859-1,它将处理所有字符0到255而没有错误。对于导致编码错误的字符,可以使用unidecode。
以下适用于Python 2和3:
from builtins import str
import unidecode
def unidecode_fallback(e):
part = e.object[e.start:e.end]
replacement = str(unidecode.unidecode(part) or '?')
return (replacement, e.start + len(part))
codecs.register_error('unidecode_fallback', unidecode_fallback)
s = u'abcdé–fghijkl'.encode('iso-8859-1', errors='unidecode_fallback')
print(s.decode('iso-8859-1'))
结果:
abcdé-fgh?ijkl
然而,这会将非ISO-8859-1字符转换为ASCII等效字符,而有时候使用非ASCII,ISO-8859-1等效字符可能更好。