我正在尝试创建可读取的功能。无论编码如何,都要写文件(在某种程度上)。
但是在尝试编写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)
答案 0 :(得分:0)
您需要在写入之前将文件编码为字节(错误发生是因为Python在写入之前尝试将数据强制转换为字节,并且不能将unicode字符装入ASCII(这是默认编码)。 / p>
因此需要将f.write(soup.contents[0])
更改为f.write(soup.contents[0].encode(encoding))
。这将保持写入文件中的编码。