2014-02-12 121 views
2

我试图打开一个文件,但不断得到一个错误(解码错误)。我终于遇到了一个关于stackoverflow的话题,并且还有一步。但是,现在当我尝试循环访问我的文件时,我没有得到任何结果。该文件是uTorrent的设置文件。我相当新的Python和编程,所以我想我可以尝试从该文件中读取和提取一些参数。UnicodeDecodeError当试图打开文件

getDir = r'{0}/{1}/{2}/AppData/Roaming/uTorrent/settings.dat'.format(partition, 
"Users", user) 

data = [] 
try: 
    with codecs.open(getDir, "r") as f: 
     for lines in f: 
      data.append(lines) 
except UnicodeEncodeError: 
    pass 

当我使用UnicodeEncodeError但是没有其他异常时出现错误。我尝试过使用/不使用codecs.open,并且在open函数中指定解码类型,我也使用了ignore。代码通过但列表保持空白。

UnicodeDecodeError: 'charmap' codec can't decode byte 0x8f in position 1962: character maps to <undefined> 

该代码与其他文件在同一目录中正常工作。我检查过这个文件,并且有一些奇怪的字符。下面的例子。

RÉ” tÝï:Q‘æÐ†• 

真的很感谢帮助和感谢一个真棒网站!

+2

您没有指定目标编码。你知道哪一个是? –

+0

不,请告诉我我是如何做到的。 – Ekonomipapper

回答

0

摘要

您需要在打开文件中指定的编码。如果编码是'utf-16',它会看起来像这样,尽管从你给出的例子来看,它可能不是。

with codecs.open(getDir, "r", encoding="utf-16") as f: 

错误处理

您还可以指定希望通过把在参数“错误”处理的错误。这使您可以替换未知字符或忽略它们。在这里看到更多的细节:http://docs.python.org/2/library/codecs.html#codec-base-classes

读物

你可能想知道你怎么能确定编码?总之,你需要知道编码是什么。以简明易懂的方式介绍编码和解码的链接:http://www.joelonsoftware.com/articles/Unicode.html

相关问题