我想Unicode字符串转换为ISO-8859-15。 这些字符串包括u"\u2019"
(右单引号看到http://www.fileformat.info/info/unicode/char/2019/index.htm )特性而不是ISO-8859-15字符的一部分组。
在Python中,如何规范中的Unicode字符,以符合ISO-8859-15编码?
我看过没有成功unicodedata模块。 我设法做的工作有
s.replace(u"\u2019", "'").encode('iso-8859-15')
但我想找到一个更普遍和更清洁的方式。
谢谢你的帮助
使用Unicode版本translate
功能,假设s
是一个unicode字符串:
s.translate({ord(u"\u2019"):ord(u"'")})
的Unicode版本的参数translate
为一个字典映射Unicode码到Unicode码。 添加到这个字典你不能在你的目标编码编码其他字符。
你可以建立自己的映射表中多了几分可读的形式,并从它创建的映射字典,例如:
char_mappings = [(u"\u2019", u"'"),
(u"`", u"'")]
translate_mapping = {ord(k):ord(v) for k,v in char_mappings}
从翻译文档:
对于Unicode对象的translate()方法不接受可选deletechars说法。 相反,它返回所有字符都通过它必须是Unicode码到Unicode码,Unicode字符串或无的映射给定的转换表映射s的副本。 未映射的字符都保持不变。 映射到人物没有被删除。 注意,更灵活的方法是创建使用的编解码器模块的自定义字符映射编解码器(见encodings.cp1251的示例)。
除非你想创建一个转换规则(如果你这样做,看看Boud的答案),你可以选择默认的错误处理程序之一encode
提供,甚至注册自己的一个:
In [4]: u'\u2019 Hi'.encode('iso-8859-15', 'replace')
Out[4]: '? Hi'
In [5]: u'\u2019 Hi'.encode('iso-8859-15', 'ignore')
Out[5]: ' Hi'
In [6]: u'\u2019 Hi'.encode('iso-8859-15', 'xmlcharrefreplace')
Out[6]: '’ Hi'
从encode
文档字符串:
S.encode([编码[,错误]]) - >字符串或Unicode
用S表示编码注册的编解码器编码。 编码默认为默认编码。 可给予错误设定了不同的错误处理方案。 默认值是“严格”意味着编码错误养UnicodeEncodeError。 其他可能的值是“忽略”,“替代”和“xmlcharrefreplace”以及与codecs.register_error可以处理UnicodeEncodeErrors注册任何其他名称。
对于信息,我最终的解决方案:
iso885915_utf_map = {
u"\u2019": u"'",
u"\u2018": u"'",
u"\u201c": u'"',
u"\u201d": u'"',
}
utf_map = dict([(ord(k), ord(v)) for k,v in iso885915_utf_map.items()])
s.translate(utf_map).encode('iso-8859-15')
谢谢您的帮助