2012-09-19 38 views
4

我试图扭转希伯来语字符串在Python:如何在Python中反转希伯来字符串?

line = 'אבגד' 
reversed = line[::-1] 
print reversed 

,但我得到:

UnicodeDecodeError: 'ascii' codec can't decode byte 0x93 in position 0: ordinal not in range(128) 

护理解释什么,我做错了什么?

编辑:答案很好,谢谢! 我也想保存字符串转换成使用文件:

w1 = open('~/fileName', 'w') 
w1.write(reverseLine) 

,但现在我得到:

return codecs.charmap_encode(input,errors,encoding_table) 
UnicodeEncodeError: 'charmap' codec can't encode characters in position 1-3: character maps to <undefined> 

任何想法如何解决这个问题,太?

编辑:找到解决方案,请参阅我的答案。总之我用

codecs.open('~/fileName', 'w', encoding='utf-8') 

,而不是

open('~/fileName', 'w') 

回答

7

在希伯来语字符串前面添加u工作对我来说:

In [1]: line = u'אבגד' 

In [2]: reversed = line[::-1] 

In [2]: print reversed 
דגבא 

你的第二个问题,你可以使用:

import codecs 

w1 = codecs.open("~/fileName", "r", "utf-8") 
w1.write(reversed) 

要写入unicode字符串到文件fileName

另外,不使用codecs,你需要写文件时编码reversed字符串utf-8

with open('~/fileName', 'w') as f: 
    f.write(reversed.encode('utf-8')) 
2

您需要使用Unicode字符串常量:

line = u'אבגד' 
reversed = line[::-1] 
print reversed 
1

字符串默认为被视为ASCII。使用U '' 对Unicode

line = u'אבגד' 
reversed = line[::-1] 
print reversed 
1

确保您使用Unicode对象

line = unicode('אבגד', 'utf-8') 
reversed = line[::-1] 
print reversed 
+0

希伯来文字符顺序是非常复杂的。看到我的答案。 –

0

找到如何写入文件:

w1 = codecs.open('~/fileName', 'w', encoding='utf-8') 
w1.write(reverseLine) 
2

你需要超过反转字符串翻转希伯来语backwords,由于数字的相反顺序等。

算法更加复杂;

本页面中的所有答案(至此日期)将极有可能使您的数字和非希伯来文本出现问题。

在大多数情况下,你应该使用

from bidi.algorithm: 
import get_display 
print get_display(text) 
+0

谢谢!我一直在互联网上寻找一种方法来做到这一点。 – Jespertheend