5

我正在尝试在 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')
4

6 回答 6

8

在希伯来语字符串前面添加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'))
于 2012-09-19T23:22:49.203 回答
7

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

算法要复杂得多;

此页面中的所有答案(到目前为止)很可能会弄乱您的数字和非希伯来语文本。

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

from bidi.algorithm import get_display
print get_display(text)
于 2016-01-11T17:20:29.460 回答
2

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

line = u'אבגד'
reversed = line[::-1]
print reversed
于 2012-09-19T23:22:31.017 回答
1

字符串默认被视为 ascii。使用 u'' 表示 unicode

line = u'אבגד'
reversed = line[::-1]
print reversed
于 2012-09-19T23:23:03.527 回答
1

确保您使用的是 unicode 对象

line = unicode('אבגד', 'utf-8')
reversed = line[::-1]
print reversed
于 2012-09-19T23:24:21.823 回答
0

找到如何写入文件:

w1 = codecs.open('~/fileName', 'w', encoding='utf-8')
w1.write(reverseLine)
于 2012-09-19T23:53:59.027 回答