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
דגבא

2番目の質問には、次を使用できます。

import codecs

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

Unicode 文字列を file に書き込みますfileName

または、 を使用せずに、ファイルへの書き込み時に文字列codecsをエンコードする必要があります。reversedutf-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'' を使用

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 に答える