我正在尝试从文本文件中读取希伯来语:
def task1():
f = open('C:\\Users\\royi\\Desktop\\final project\\corpus-haaretz.txt', 'r',"utf-8")
print 'success'
return f
a = task1()
当我阅读它时它向我显示:
'[\xee\xe0\xee\xf8 \xee\xf2\xf8\xeb\xfa \xf9\xec \xe4\xf0\xe9\xe5-\xe9\xe5\xf8\xf7 \xe8\xe9\xe9\xee\xf1: \xf2\xec \xe1\xe9\xfa \xe4\xee\xf9\xf4\xe8 \xec\xe1\xe8\xec \xe0\xfa \xe7\xe5\xf7 \xe4\xe7\xf8\xed, \xec\xe8\xe5\xe1\xfa \xe9\xf9\xf8\xe0\xec \xee\xe0\xfa \xf0\xe9\xe5
还有更多。
我怎么看?
答案 0 :(得分:5)
你这样打印:
print task1().encode('your terminal encoding here')
您必须确保您的终端能够显示希伯来字符。例如,在安装了希伯来语语言环境的完整utf-8 Linux distrib 下:
print task1().encode('utf-8')
小心open
:
codecs
模块。open(path, 'r', encoding='utf-8')
。您甚至可以省略'r'
。那你为什么要用encode
?
好吧,当你读取一个文件并告诉Python编码时,它会返回一个unicode对象,而不是string对象。例如,在我的系统上:
>>> import codecs
>>> content = codecs.open('/etc/fstab', encoding='utf-8').read()
>>> type(content)
<type 'unicode'>
>>> type('')
<type 'str'>
>>> type(u'')
<type 'unicode'>
如果要使其成为可打印的字符串(如果它包含非ascii字符),则需要将其编码回字符串:
>>> type(content.encode('utf-8'))
<type 'str'>
我们使用encode
,因为在这里我们讨论的是一个或多或少的通用文本对象(unicode与文本操作一样通用),然后将它(编码)转换为特定的表示形式(utf- 8)。
我们需要这个特定的表示,因为你的系统不关于Python内部,如果你没有指定编码,只能打印ascii字符。因此,当您输出时,您专门编码为您的系统可以理解的编码。对我来说,幸运的是'utf-8',所以很容易。如果你在Windows上,它可能会变得棘手。
答案 1 :(得分:1)
您需要使用codecs
module打开文件。 open()
(请参阅docs)调用不会采用第三个参数,第三个参数将是bufsize
。
具体来说是codecs.open()
。您在阅读时始终进行解码,输出时进行编码: - )
答案 2 :(得分:1)
从它的外观来看,在我看来,你获得的字符串编码是'windows-1255'
,而不是'utf-8'
。尝试使用该编码打开文件。
答案 3 :(得分:0)
您对如何阅读文件的说明似乎不正确。令人费解的是,“它”设法向您展示显然是在cp1255中编码的希伯来语文本的字节。
我们需要明确地显示 文件的前几个(比如200个)字节中的内容。请在命令提示符窗口中运行以下命令之一,具体取决于您使用的Python:
Python 2.x(假设在标准位置安装了2.7):
prompt>c:\python27\python -c "import locale; print locale.getpreferredencoding(), repr(open('your_file.txt', 'rb').read(200))"
或Python 3.x
prompt>c:\python32\python -c "import locale; print(locale.getpreferredencoding(),ascii(open('your_file.txt', 'rb').read(200)))"
编辑你的问题和(1)复制/粘贴命令的输出(2)告诉我们你使用的是什么版本的Python。