.encode
的作用是将 Unicode 字符串(在 Python 2.x 中为unicode
,在 Python 3.x 中为 str
)转换为字节字符串(在Python 2.x中为str
,在 Python 3.x 中为 bytes
).
在 Python 2.x 中,可以对 str
对象调用 .encode
方法,Python 隐式地先解码该字符串到 Unicode:即 s.encode(e)
的效果就像你写成了 s.decode(sys.getdefaultencoding()).encode(e)
。
问题在于默认编码方式是 "ascii",而你的字符串包含非 ASCII 字符。你可以通过显式指定正确的编码方式来解决这个问题。
>>> '\xAF \xBE'.decode('ISO-8859-1').encode('UTF-8')
'\xc2\xaf \xc2\xbe'
enca
报告是这样的)。因此,这个过程不能应用于整个文本。 - Jindřich Mynarz你的文件已经是UTF-8编码文件了。
# saved encoding-sample to /tmp/encoding-sample
import codecs
fp= codecs.open("/tmp/encoding-sample", "r", "utf8")
data= fp.read()
import unicodedata as ud
chars= sorted(set(data))
for char in chars:
try:
charname= ud.name(char)
except ValueError:
charname= "<unknown>"
sys.stdout.write("char U%04x %s\n" % (ord(char), charname))
手动填写未知名称:
字符 U000a 换行符
字符 U001e 信息分隔符二
字符 U001f 信息分隔符一
"string".decode()
来解决这个问题,针对最常见的编码进行解码,如果一切都失败了,就使用chardet
库来猜测编码。 - Jindřich Mynarz这不是ASCII码(ASCII码只能到127;\xaf
是175)。你需要先找出正确的编码,解码它,然后重新编码为UTF-8。
你能提供一个实际的字符串样例吗?那么我们可能可以猜到当前的编码。
pymarc
库来解析文件了。问题是它无法正确解析这些字符(\xaf...)。因此,在将文件传递给解析器之前,我正在尝试修复它。 - Jindřich Mynarz
\xaf
或类似字符。你有包含这些字符的样本吗? - dkarpenca
(http://linux.die.net/man/1/enca) 的说法,它是 UTF-8 编码,但被“非文本数据”所包围或穿插。 - Jindřich Mynarz