我试图在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)
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)
由于数字等的相反顺序,您不仅需要反转字符串来翻转希伯来语后单词。
算法要复杂得多。
此页面上的所有答案(到现在为止)很可能会弄乱您的数字和非希伯来文字。
在大多数情况下,您应该使用
from bidi.algorithm:
import get_display
print get_display(text)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2463 次 |
| 最近记录: |