python中的阿拉伯语,Unicode和文件

Bet*_*moo 2 python unicode file

我试图从Youtube上获取一些阿拉伯语文字,然后将其写入文件中并再次阅读。

抓取文本的源文件有:

#!/usr/bin/python
#encoding: utf-8
Run Code Online (Sandbox Code Playgroud)

在文件的开头。

编写文本是这样完成的:

f.write(comment + '\n' )
Run Code Online (Sandbox Code Playgroud)

文件内容是可读的阿拉伯语,因此我认为前面的步骤是正确的。

但是,当尝试从文件中读取内容(例如将它们写入另一个文件)时,会出现问题:

in = open('data_Pass1/EG', 'rb')
out.write(in.read())
Run Code Online (Sandbox Code Playgroud)

结果是这样的输出文件:

\xd8\xa7\xd9\x8a\xd9\x87
Run Code Online (Sandbox Code Playgroud)

是什么原因造成的?

sha*_*noo 5

在python 3.x中


in = open('data_Pass1/EG', 'r', encoding='utf-8')
out = open('_file_name_', 'w', encoding='utf-8')

在python 2.x中


import codecs
in = codecs.open('data_Pass1/EG', 'r', encoding='utf-8')
out = codecs.open('_file_name_', 'w', encoding='utf-8')


JAB*_*JAB 0

您正在以二进制(“rb”)模式打开输入文件。打开文件以文本形式读取(“r”)。我倾向于使用 Python 3,因此源文件默认为 UTF-8,因此我不知道设置文件内 .py 文件的编码对文本 I/O 有何影响,但如果有必要,您可能还想在所有文件 I/Oencoding='utf8'的调用中使用open(),除非这在 2.7 中不起作用,在这种情况下,我不确定在 Python 2.7 中处理该问题的最佳方法是什么......


正如 Lee Daniel Crocker 所建议的,如果您将输入直接传递到输出,您可能最好以二进制模式打开输入和输出文件(“rb”表示输入文件,“wb”表示输出)而不对其进行任何文本操作。(尽管按照 Andy 的评论,在 Python 2 中,最好以二进制模式打开文本文件并进行显式编码/解码。)