6

我正在尝试从 Youtube 获取一些用阿拉伯语编写的文本,将其写入文件并再次读取。

获取文本的源文件有:

#!/usr/bin/python
#encoding: utf-8

在文件的开头。

编写文本是这样完成的:

f.write(comment + '\n' )

文件内容是可读的阿拉伯语,所以我假设前面的步骤是正确的。

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

in = open('data_Pass1/EG', 'rb')
out.write(in.read())

这导致输出文件如下:

\xd8\xa7\xd9\x8a\xd9\x87

这是什么原因造成的?

4

2 回答 2

9

在 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')

于 2013-06-13T17:29:16.917 回答
0

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


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

于 2013-06-13T17:28:03.537 回答