如何使用Python将文件格式从Unicode转换为ASCII?
我使用一个第三方工具,它输出的文件是Unicode格式的。不过,我更喜欢它是ASCII格式的。这个工具没有设置可以改变文件格式。
用Python有什么好的方法可以把整个文件格式转换过来呢?
8 个回答
顺便说一下,有一个Linux命令叫做iconv
,可以用来做这种工作。
iconv -f utf8 -t ascii <input.txt >output.txt
我觉得这个问题比你想的要复杂得多。把文件从Unicode格式转换成ASCII格式很简单,但要把所有的Unicode字符都转换成合理的ASCII字符(因为很多字母在这两种编码中并不相同)就难多了。
这个Python的Unicode教程可能会让你更清楚Unicode字符串转换成ASCII时发生了什么:http://www.reportlab.com/i18n/python_unicode_tutorial.html
这里有个网站上的有用引用:
Python 1.6也有一个“unicode”内置函数,你可以指定编码:
> >>> unicode('hello') u'hello'
> >>> unicode('hello', 'ascii') u'hello'
> >>> unicode('hello', 'iso-8859-1') u'hello'
> >>>
这三个都返回相同的结果,因为“Hello”中的字符在这三种编码中都是通用的。
现在我们来编码一些带有欧洲口音的字符,这些字符不在ASCII范围内。你在控制台看到的内容可能会根据你的操作系统设置而有所不同;Windows让我可以输入ISO-Latin-1编码。
> >>> a = unicode('André','latin-1')
> >>> a u'Andr\202'
如果你无法输入带有重音的字母e,你可以输入字符串'Andr\202',这样就不会产生歧义。
Unicode支持所有常见的操作,比如遍历和分割。我们在这里就不详细讲这些了。
你可以很简单地使用 unicode
函数来转换文件,但如果文件里有一些没有直接对应ASCII字符的Unicode字符,你就会遇到麻烦。
这篇博客推荐使用 unicodedata
模块,这个模块可以帮助你大致转换那些没有直接ASCII值的字符,比如说:
>>> title = u"Klüft skräms inför på fédéral électoral große"
通常会被转换成
Klft skrms infr p fdral lectoral groe
这其实是挺不对的。不过,使用 unicodedata
模块后,结果就能更接近原来的文本:
>>> import unicodedata
>>> unicodedata.normalize('NFKD', title).encode('ascii','ignore')
'Kluft skrams infor pa federal electoral groe'