【问题标题】:python UTF-8 can't handle (ñ) and (ö)python UTF-8 无法处理 (ñ) 和 (ö)
【发布时间】:2016-08-21 21:57:08
【问题描述】:

我正在从一个文件中读取一行,然后将该行复制到另一个文件中。

这是读取文件内容的代码

files = [f for f in os.listdir('.') if os.path.isfile(f)]
for file in files:
    if file.endswith(".ttl"):
        with open(file) as fileTTL:
            lines = fileTTL.readlines()
            for line in lines:
                writeRDFToFile(line)

对于每一行,我调用 writeRDFToFile 函数,即:

def writeRDFToFile(rdf):
    f = open('joined.ttl','w')
    try:
        rdf = rdf.encode('UTF-8')
        f.write(rdf) # python will convert \n to os.linesep
    except Exception as e:
        print "exception happened " + rdf
        print e
    f.close()

我收到了这个错误:

'ascii' codec can't decode byte 0xc3 in position XXX: ordinal not in range(128)

关于这个值:

Luis_Buñuel Lasse_Hallström

但正如你所见,我已经尝试使用 UTF-8 对其进行编码,那么为什么错误从一开始就是 ascii 呢?

谢谢

【问题讨论】:

  • 你说得对,我的评论毫无意义>_>

标签: python-2.7 utf-8 ascii


【解决方案1】:

我相信您在这里遇到的问题是 输入,而不是 输出(没有堆栈跟踪很难确定)

您的文件读取(实际上是在执行 open(file).readlines())正在将此文件作为 string 对象列表读取,而不是 encode('UTF-8) 需要的 unicode(我相信它正在尝试一些自动魔法,但是失败,因为输入不是 ASCII)。

尝试完全删除rdf = rdf.encode('UTF-8')

【讨论】:

  • 删除该行完全删除了异常,但在输出文件中,我刚刚得到最后一个文件的最后一行,我应该拥有输出文件中所有文件的所有行。
  • 就像每次我在 above 上写当前内容,而不是 append 到当前内容。你能帮忙吗?
  • 那是另一个问题。使用模式'a' (open('joined.ttl', 'a')) 或者更好的是,打开输出文件一次(例如,在您的with open(file) as fileTTL 之后使用另一个类似的with 语句)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
  • 2020-08-31
  • 2019-10-02
  • 2012-07-27
  • 2011-01-22
  • 2015-12-28
相关资源
最近更新 更多