我想将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')但我想找到一种更通用、更简洁的方法。
谢谢你的帮忙
发布于 2012-05-28 21:25:28
假设s是一个unicode字符串,请使用translate函数的unicode版本:
s.translate({ord(u"\u2019"):ord(u"'")})translate的unicode版本的参数是一个将unicode序号映射到unicode序号的字典。在此字典中添加目标编码中无法编码的其他字符。
您可以以更具可读性的形式构建映射表,并从中创建映射字典,例如:
char_mappings = [(u"\u2019", u"'"),
(u"`", u"'")]
translate_mapping = {ord(k):ord(v) for k,v in char_mappings}来自翻译文档:
对于Unicode对象,
()方法不接受可选的deletechars参数。相反,它返回s的副本,其中所有字符都已通过给定的转换表进行映射,该转换表必须是Unicode序号到Unicode序号、Unicode字符串或无的映射。未映射的字符保持不变。映射到无的字符将被删除。注意,更灵活的方法是使用编解码器模块创建自定义字符映射编解码器(有关示例,请参阅encodings.cp1251 )。
发布于 2012-05-28 21:34:43
除非你想创建一个转换规则(如果你这样做了,看看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进行编码。编码默认为默认编码。可以给出错误以设置不同的错误处理方案。默认值为'strict‘,表示编码错误会引发UnicodeEncodeError。其他可能的值是'ignore‘、'replace’和'xmlcharrefreplace‘以及任何其他注册到codecs.register_error的可以处理UnicodeEncodeErrors的名称。
发布于 2012-05-28 22:30:18
作为参考,我的最终解决方案是:
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')谢谢你的帮助
https://stackoverflow.com/questions/10785231
复制相似问题