如何在Python中反转希伯来字符串?

ker*_*nix 4 python

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

line = '????'
reversed = line[::-1]
print reversed
Run Code Online (Sandbox Code Playgroud)

但我得到:

UnicodeDecodeError: 'ascii' codec can't decode byte 0x93 in position 0: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

小心解释我做错了什么?

编辑:答案很棒,谢谢!我也尝试使用以下命令将字符串保存到文件中:

w1 = open('~/fileName', 'w')
w1.write(reverseLine)
Run Code Online (Sandbox Code Playgroud)

但现在我得到:

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

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

编辑:找到解决方案,请参阅下面的答案.总之,我用过

codecs.open('~/fileName', 'w', encoding='utf-8') 
Run Code Online (Sandbox Code Playgroud)

代替

open('~/fileName', 'w')
Run Code Online (Sandbox Code Playgroud)

K Z*_*K Z 7

u在希伯来字符串前添加对我有用:

In [1]: line = u'????'

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

In [2]: print reversed
????
Run Code Online (Sandbox Code Playgroud)

对于第二个问题,您可以使用:

import codecs

w1 = codecs.open("~/fileName", "r", "utf-8")
w1.write(reversed)
Run Code Online (Sandbox Code Playgroud)

将unicode字符串写入文件fileName.

或者,在不使用的情况下codecs,您需要在写入文件时对reversed字符串进行编码utf-8:

with open('~/fileName', 'w') as f:
    f.write(reversed.encode('utf-8'))
Run Code Online (Sandbox Code Playgroud)


Ber*_*ala 5

由于数字等的相反顺序,您不仅需要反转字符串来翻转希伯来语后单词。

算法要复杂得多。

此页面上的所有答案(到现在为止)很可能会弄乱您的数字和非希伯来文字。

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

from bidi.algorithm:
import get_display
print get_display(text)
Run Code Online (Sandbox Code Playgroud)