0

我写了一个简单的文件解析器和编写器,但后来我看到一篇谈论 unicode 重要性的文章,然后我想到我假设输入文件是 ascii 编码的,但可能并非一直如此,尽管在我的情况下很少见。

在那些罕见的情况下,我希望使用 UTF-8 编码的文件。

有没有办法通过简单地改变我的读写方式来处理 UTF-8 文件?我对字符串所做的只是存储它们,然后将它们写出来,所以我只需要确保我可以读取它们、存储它们并正确写入它们。

此外,我是否必须分别处理 ascii 和 UTF-8 文件并为每个文件编写不同的函数?除了 ascii 文件之外,我还没有处理过任何其他文件,并且只阅读了有关处理 unicode 的内容。

4

4 回答 4

3

Python 原生支持 Unicode。如果您直接从第一个文件读取和写入第二个文件,则不会丢失任何数据,因为它会逐字复制字节。但是,如果您对字符串进行解码然后重新编码,则需要确保使用正确的编码。

于 2011-07-05T19:50:43.607 回答
3

如果您使用的是 Python 2,您可以简单地将所有str对象更改为unicode对象。Unicode 对象具有与字符串相同的方法,但以 unicode 格式而不是 ASCII 编码。请参阅http://docs.python.org/library/functions.html#unicode

如果您使用的是 Python 3,则默认情况下字符串以 UTF-8 编码。

于 2011-07-05T19:51:27.153 回答
2

如果您使用的是 Python 2.6 或更高版本,则可以使用该io库及其io.open方法打开您想要的文件。它有一个encoding参数,应根据'utf-8'您的情况设置。当您读取或写入返回的文件对象时,字符串会自动进行编码/解码。

无论如何,您不需要为 ASCII 做一些特殊的事情,因为 UTF-8 是 ASCII 的超集。

于 2011-07-05T20:00:43.047 回答
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.']
于 2011-07-05T20:24:47.677 回答