【问题标题】:Python read() works with UTF-8 but readlines() "doesn't"Python read() 适用于 UTF-8 但 readlines() “不”
【发布时间】:2013-09-03 07:05:46
【问题描述】:

所以,我正在处理一个(巨大的)UTF-8 编码文件。我用它做的第一件事是使用 File Object readlines() 方法在列表中获取它的行。但是,当我使用 print 命令进行调试时,我会得到诸如 \xc3 之类的东西。

这是一个复制我的问题的非常小的示例;我创建了一个仅包含文本“Clara Martínez”的 t.txt 文件

f = open("t.txt", "r")
s = f.read()
print s
Clara Martínez
#If I do the following however
lines = f.readlines()
for l in lines:
    print l
['Clara Mart\xc3\xadnez']
#write however works fine!
f2 = open("t2.txt", "w")
for l in lines:
    f2.write(l)
f2.close()
f1.close()

然后我打开“t2.txt”,字符串是正确的,即:Clara Martínez。 有没有办法让 readlines() 像 read() 一样工作?

【问题讨论】:

  • 如果我告诉你\xc3\xadí呢?
  • 你应该使用io.openencoding='utf-8'。这会将文件读取为具有正确编码的 Unicode,而不是一系列可能会或可能不会按您期望的方式打印的字节。

标签: python utf-8 io


【解决方案1】:

您声称:

lines = f.readlines()
for l in lines:
    print l

将导致:

['Clara Mart\xc3\xadnez']

这不是真的,它不会。我认为你在代码中犯了一个错误,并写了这个:

lines = f.readlines()
for l in lines:
    print lines

假设文件只包含一行文本'Clara Mart\xc3\xadnez',该代码将给出您所说的结果。

【讨论】:

  • 这是对问题表述的挑剔,无助于找出答案。这个答案应该是评论。
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多