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

问题描述 投票:1回答:4

我目前的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 

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

python unicode utf-8 ascii
4个回答
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()

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作为输入编码。然后它会自动删除。


1
投票

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


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

0
投票

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

with open("../file_path", encoding='utf8'):
         # your code
© www.soinside.com 2019 - 2024. All rights reserved.