Python:UnicodeDecodeError:' ascii'编解码器不能解码位置0的字节0xef:序数不在范围内(128)

时间:2016-11-15 23:53:49

标签: python unicode utf-8 ascii

我目前的python 3代码存在问题。

 replace_line('Products.txt', line, tenminus_str)

我试图变成utf-8的行,但是当我尝试像其他人那样尝试这样做时,我会遇到错误,例如没有属性,以及当我尝试添加时,例如。 ..

.decode("utf8")

...到最后,我仍然得到它正在使用ascii的错误。我还尝试了其他方法,如添加io等其他方法。面前并添加逗号

encoding = 'utf8'

我用于replace_line的函数是:

def replace_line(file_name, line_num, text):
    lines = open(file_name, 'r').readlines()
    lines[line_num] = text
    out = open(file_name, 'w')
    out.writelines(lines)
    out.close()

我该如何解决这个问题?请注意,我是Python的新手,并且不够先进,无法进行良好的调试。

编辑:对此问题的解决方法不同于重复'

编辑2:我现在有另一个错误。

File "FILELOCATION", line 45, in refill replace_line('Products.txt', str(line), tenminus_str) 

File "FILELOCATION", line 6, in replace_line lines[line_num] = text

TypeError: list indices must be integers, not str 

这是什么意思,我该如何解决?

4 个答案:

答案 0 :(得分:4)

codecs模块正是您所需要的。 detail这里

import codecs
def replace_line(file_name, line_num, text):
    f = codecs.open(file_name, 'r', encoding='utf-8')
    lines = f.readlines()
    lines[line_num] = text
    f.close()
    w = codecs.open(file_name, 'w', encoding='utf-8')
    w.writelines(lines)
    w.close()

答案 1 :(得分:2)

将您的功能更改为:

def replace_line(file_name, line_num, text):
    with open(file_name, 'r', encoding='utf8') as f:
        lines = f.readlines()
    lines[line_num] = text
    with open(file_name, 'w', encoding='utf8') as out:
        out.writelines(lines)

encoding='utf8'会正确解码您的UTF-8文件。

退出其块时,

with会自动关闭该文件。

由于您的文件以\xef开头,因此它可能在开头有一个UTF-8编码的字节顺序标记(BOM)字符。上面的代码将在输出时保留该代码,但如果您不希望它使用utf-8-sig进行输入编码。然后它会被自动删除。

答案 2 :(得分:1)

处理编码问题您可以尝试将以下设置添加到头部

import sys
reload(sys)
sys.setdefaultencoding('utf-8')
Type = sys.getfilesystemencoding()

答案 3 :(得分:0)

如果正在读取文件,请尝试添加 encoding ='utf8'

with open("../file_path", encoding='utf8'):
         # your code