编码不可知文件I / O错误

时间:2014-12-03 03:21:22

标签: python unicode encoding beautifulsoup

我正在尝试创建可读取的功能。无论编码如何,都要写文件(在某种程度上)。

但是在尝试编写UTF-8文件时遇到错误。

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5136: ordinal not in range(128)

出了什么问题,我该如何解决?

def file_read_agnostic(filePath):
    # Read file regardless of encoding (UTF-16-LE, UTF-8, ANSI)
    # Use BeautifulSoup to determine encoding

    soup = BeautifulSoup(open(filePath, 'r').read())
    encoding = soup.originalEncoding

    try:
        return soup.contents[0].decode(encoding)
    except Exception, e:
        return soup.contents[0]

def file_write_agnostic(filePath, contents):

    soup = BeautifulSoup(contents)
    encoding = soup.originalEncoding

    f = open(filePath, mode='w')
    f.write(soup.contents[0])
    f.close()

# error occurs here
file_write_agnostic("a.txt", myUTF7Content)

1 个答案:

答案 0 :(得分:0)

您需要在写入之前将文件编码为字节(错误发生是因为Python在写入之前尝试将数据强制转换为字节,并且不能将unicode字符装入ASCII(这是默认编码)。 / p>

因此需要将f.write(soup.contents[0])更改为f.write(soup.contents[0].encode(encoding))。这将保持写入文件中的编码。