首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以使用拉丁文-1编码写入stdout,但不能写入文件(Python2.6)

可以使用拉丁文-1编码写入stdout,但不能写入文件(Python2.6)
EN

Stack Overflow用户
提问于 2012-11-15 15:25:38
回答 1查看 4.3K关注 0票数 4

我有数据,这是unicode,并希望把它写到一个文件。我正在使用python2.6。我能够打印编码的值,但无法将其写入文件。环境的默认编码是UTF-8。也试过使用编解码器,但也没有运气。下面是我正在使用的一个示例代码片段。

代码语言:javascript
复制
#!/usr/bin/python
import sys
import codecs
import csv

sh = [u'T\xe9l\xe9vista S.A.', u'T\xe9l\xe9vista S.A.', 'Python']
print sys.stdout.encoding
f = codecs.open('listwrite.txt', 'w', encoding='latin-1')
for item in sh:
  f.write(item)
f.close()

for i in sh:
  print i.encode('latin-1')

输出:

代码语言:javascript
复制
UTF-8
Télévista S.A.
Télévista S.A.
Python

Contents of listwrite.txt
Télévista S.A.Télévista S.A.Python

如上文所示,文件是用UTF-8编码编写的,而不是拉丁文-1。如何更改它并重写文件的默认编码。

编辑: 2

此外,使用csv编写器给出了UnicodeEncodeError:'ascii‘编解码器不能在位置1中编码字符u’\xe9 9:序号不在范围(128个)。

代码如下:

代码语言:javascript
复制
#!/usr/bin/python
import sys
import codecs
import csv

sh = [u'T\xe9l\xe9vista S.A.', u'T\xe9l\xe9vista S.A.', 'Python']
print sys.stdout.encoding
c = csv.writer(codecs.open('listwrite.txt', 'w', encoding='latin-1'), quoting=csv.QUOTE_NONE)
c.writerow(sh)
f.close()

for i in sh:
  print i.encode('latin-1')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-15 18:41:53

我认为你从一个错误的角度来解决这个问题。在编写之前尝试对每一行进行编码:

代码语言:javascript
复制
import csv
sh = [u'T\xe9l\xe9vista S.A.', u'T\xe9l\xe9vista S.A.', 'Python']

f = open('listwrite.txt', 'wb') # binary mode
writer = csv.writer(f)
writer.writerow([item.encode('latin-1') for item in sh])
f.close()

现在您有了一个正确的latin1 1编码文件:

代码语言:javascript
复制
$ cat listwrite.txt | iconv -f latin1
Télévista S.A.,Télévista S.A.,Python
$ file listwrite.txt 
listwrite.txt: ISO-8859 text, with CRLF line terminators
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13400636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档