python在文件中写入类对象_如何在Python中将unicode对象写入文件?

我尝试将"字符串"写入文件并得到以下错误消息:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xcd' in position 6: ordinal not in range(128)

我尝试了以下方法:

print >>f, txt

print >>f, txt.decode('utf-8')

print >>f, txt.encode('utf-8')

他们都不工作。 我有同样的错误信息。

编码和解码背后的想法是什么? 如果我有一个unicode对象,可以直接将其写入文件中还是需要将其转换为字符串?

我如何找出使用了什么编码? 我怎么知道它是utf-8还是ascii或其他?

添加

我想我刚刚设法将字符串保存到文件中。 print >>f, txt和print >>f, txt.decode('utf-8')均无效,但print >>f, txt.encode('utf-8')正常。 我没有收到错误消息,并且在文件中看到了中文字符。

那弦是什么?

@EbraHim,我想它是一个unicode对象,因为我是通过以下方式读取字符串而获得的:for line in io.open(fname, encoding="utf8"):

io.open(fname,encoding =" utf8")中的行的@Roman:将编码更改为utf-8

您的问题在这里得到回答:stackoverflow.com/questions/6048085/

文件包含字节。 Unicode字符串由代码点组成。 您需要将它们转换为字节,有很多方法可以做到这一点,这称为编码。

我最近发布了另一个解决此问题的答案。关键语录:

For a good overview of the difference, read one of Joel's articles, but the gist is that bytes are, well, bytes (groups of 8 bits without any further meaning attached), whereas characters are the things that make up strings of text. Encoding turns characters into bytes, and decoding turns bytes back into characters.

在Python 2中,unicode对象是字符串。常规str对象可以是字符串或字节字符串。 (专业提示:使用Python 3,使跟踪变得容易得多。)

您应该将字符串(而不是字节字符串)传递给print,但是您需要确保这些字符串可以由与目标文件对象。作为输出过程的一部分,Python会为您编码字符串。如果该字符串包含文件对象的编解码器无法编码的字符,则会出现类似您所看到的错误。

不知道您的txt对象中包含什么,我无法更具体地说明。

我认为您需要使用编解码器库:

import codecs

file = codecs.open("test.txt","w","utf-8")

file.write(u'\xcd')

file.close()

工作良好。

编码/解码的故事:

过去,计算机中大约只有60个字符(包括大写和小写字母+数字+一些特殊字符)。因此,只有1个字节足以为每个字母分配一个唯一的数字。将数字分配给要存储在内存中的字母称为编码。默认情况下,在python中使用的这一一字节编码名为ASCII。

随着世界计算机的发展,我们需要在计算机中增加字母和字符。因此1个字节是不够的。出现了不同的编码方案。 Unicode是著名的之一。您要存储在文件中的字符是Unicode字符,需要2个字节,因此您必须向Python明确表示您不想使用默认编码,即ASCII(因为您需要2个字节用于此字符)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值