如何在python中读写utf_8?

时间:2017-06-25 06:45:17

标签: python encoding utf-8 io

我的python脚本中有一些非ascii数据。 python可以正确处理它们,但是当我想保存它们时会出错。所以我用str.encode()对它们进行编码,然后将它们写入文件。 用于读取文件和解码数据我在python 2.7中使用str.decode()没有问题 - 来自读取文件的数据是字符串 - 但在python 3.6中没有任何str.decode()函数和我遇到了问题。

即使在整个python官方文档中,我也无法在任何地方找到答案。

示例代码:忽略案例请在此时使用手机编写

string="hello=سلام -in persian"
file=open("file.txt",'w+', encoding='utf-8')
file.write(string.encode())
# using file.write(string) raises an error
print(file.read())# if the whole string be in Persian prints sth like b'\xff\xa3....'
file.read().decode()# raises an error contains: str object doesn'have attribute decode
# here was my problem in updating from 2.7 to 3.6

file.close()

`

2 个答案:

答案 0 :(得分:1)

对于python 3.您应该使用strbytes写为文件str.encode(),然后将文件作为写二进制模式open('filename.txt', 'wb')打开。在读取时,将文件读取为读取二进制模式。 open('filename.txt', 'rb')并使用bytes.decode()将其转换回str

您可以将此作为参考:

utfchar = '¶'
with open('filename.txt', 'wb') as fp:
    fp.write(utfchar.encode())

# and later:

with open('filename.txt', 'rb') as fp:
    utfchar = fp.read().decode()

assert utfchar == '¶'

答案 1 :(得分:0)

在Python 3中,您只需编写字符串:

with open('file.txt', 'w+', encoding='utf-8') as f:
    f.write("hello=שלום in Hebrew")