python - 如何将 utf-8 花式引号转换为中性引号

标签 python python-2.7 unicode encoding utf-8

我正在编写一个小的 Python 脚本来解析 word 文档并写入 csv 文件。但是,某些文档包含一些我的脚本无法正确处理的 utf-8 字符。

花哨的引用经常出现 (u'\u201c')。有没有一种快速简便(且智能)的方法可以将它们替换为支持 ascii 的中性引号,这样我就可以将 line.encode('ascii') 写入 csv 文件?

我试图找到左边的引号并替换它:

val = line.find(u'\u201c')
if val >= 0: line[val] = '"'

但无济于事:

TypeError: 'unicode' 对象不支持项目分配

我所描述的是好的策略吗?或者我应该只设置 csv 以支持 utf-8(虽然我不确定将读取 CSV 的应用程序是否需要 utf-8)?

谢谢

最佳答案

您可以使用 Unidecode package自动将所有 Unicode 字符转换为其最接近的纯 ASCII 等效字符。

from unidecode import unidecode
line = unidecode(line)

这将处理双引号的两个方向以及单引号、破折号和其他您可能还没有发现的东西。

编辑:一条评论指出,如果您的语言不是英语,您可能会发现 ASCII 限制太多。这是对上述代码的改编,它使用白名单来指示不应转换的字符。

>>> from unidecode import unidecode
>>> whitelist = set('µÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ')
>>> line = '\u201cRésumé\u201d'
>>> print(line)
“Résumé”
>>> line = ''.join(c if c in whitelist else unidecode(c) for c in line)
>>> print(line)
"Résumé"

关于python - 如何将 utf-8 花式引号转换为中性引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28977618/

相关文章:

java - 使用 Unicode 分隔符拆分字符串

java - 如何获得一个反转的字符串(unicode 安全)

python - 独立文件中相互依赖的类(循环导入)

python - RSA 加密/解密不返回原始消息

python - 良好做法默认值

python - 使用selenium返回动态页面的html代码

python - 在同一前缀上注册多个restplus蓝图不起作用

python - 使用 Python 从星系照片中删除背景

python - 将一个数字与另一个数字的最后 n 位进行匹配

java - 如何将 "rājshāhi"打印到 Eclipse 输出控制台?