我写了一个简单的文件解析器和编写器,但后来我遇到了一篇文章,谈论unicode的重要性,然后我想到我假设输入文件是ascii编码的,这可能不是全部时间,虽然在我的情况下很少见。
在极少数情况下,我会期待UTF-8编码的文件。
有没有办法通过简单地改变我的读写方式来使用UTF-8文件?我对字符串的所有操作都是存储它们然后将它们写出来,所以我只需要确保我可以读取它们,存储它们并正确地写它们。
此外,我是否必须单独处理ascii和UTF-8文件并为每个文件编写不同的函数?我还没有使用ascii文件以外的任何东西,只阅读有关处理unicode的信息。
答案 0 :(得分:3)
Python原生支持Unicode。如果直接从第一个文件读取和写入第二个文件,则不会丢失数据,因为它会逐字复制字节。但是,如果您解码字符串然后重新编码,则需要确保使用正确的编码。
答案 1 :(得分:3)
如果您使用的是Python 2,则只需将所有str
个对象更改为unicode
个对象即可。 Unicode对象具有与字符串相同的所有方法,但是以unicode格式而不是ASCII格式编码。请参阅http://docs.python.org/library/functions.html#unicode。
如果您使用的是Python 3,默认情况下字符串将以UTF-8编码。
答案 2 :(得分:2)
如果您使用的是Python 2.6或更高版本,则可以使用io
库及其io.open
方法打开所需的文件。它有一个encoding
参数,在你的情况下应设置为'utf-8'
。当您读取或写入返回的文件对象时,字符串会自动进行解码。
无论如何,你不需要为ASCII做一些特殊的事情,因为UTF-8是ASCII的超集。
答案 3 :(得分:0)
只要你只是阅读和写入文件而不期望任何其他类型的编码输入,那么你就不必做任何特殊的事情。
% cat /tmp/u
π is 3.14.
% file /tmp/u
/tmp/u: UTF-8 Unicode text
% cat f.py
f = open('/tmp/u', 'r')
d = f.read()
print d.split()
f.close()
% python f.py
['\xcf\x80', 'is', '3.14.']
当您使用UTF-8声明或接受标准输入时,这会发生变化。
% cat g.py
s = 'π is 3.14.'
print s.split()
% python g.py
File "g.py", line 1
SyntaxError: Non-ASCII character '\xcf' in file g.py on line 1, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
要正确处理此问题,请在每个PEP 263的开头声明Python程序的编码(由上面SyntaxError
例外引用)。
% cat h.py
# -*- coding: utf-8 -*-
s = 'π is 3.14.'
print s.split()
% python h.py
['\xcf\x80', 'is', '3.14.']