首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在python中标准化iso-8859-15转换的unicode编码?

如何在python中标准化iso-8859-15转换的unicode编码?
EN

Stack Overflow用户
提问于 2012-05-28 21:10:48
回答 3查看 3.6K关注 0票数 4

我想将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模块,但没有成功。我设法做了这项工作

代码语言:javascript
复制
s.replace(u"\u2019", "'").encode('iso-8859-15')

但我想找到一种更通用、更简洁的方法。

谢谢你的帮忙

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-28 21:25:28

假设s是一个unicode字符串,请使用translate函数的unicode版本:

代码语言:javascript
复制
s.translate({ord(u"\u2019"):ord(u"'")})

translate的unicode版本的参数是一个将unicode序号映射到unicode序号的字典。在此字典中添加目标编码中无法编码的其他字符。

您可以以更具可读性的形式构建映射表,并从中创建映射字典,例如:

代码语言:javascript
复制
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 )。

票数 6
EN

Stack Overflow用户

发布于 2012-05-28 21:34:43

除非你想创建一个转换规则(如果你这样做了,看看Boud的答案),你可以选择encode提供的默认错误处理程序之一,甚至注册你自己的:

代码语言:javascript
复制
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的名称。

票数 6
EN

Stack Overflow用户

发布于 2012-05-28 22:30:18

作为参考,我的最终解决方案是:

代码语言:javascript
复制
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')

谢谢你的帮助

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10785231

复制
相关文章

相似问题

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