2016-10-29 13 views
0

Torahのヘブライ語(Unicode)テキストでPythonテキスト解析プログラミングを実行しようとしています。私は成功したJSONデータをインポートすることができています https://github.com/Sefaria/Sefaria-Export/blob/master/json/Tanakh/Torah/Genesis/Hebrew/Tanach%20with%20Text%20Only.jsonPythonコンソール/ターミナル/スクリーンにUnicodeテキストが印刷されない

:ここ

は私がSefaria.orgから使用しています例のテキスト(ジェネシス)へのリンクです。

データを調べるために、通常のデータ抽出テスト+ PRINT()を使用したテスト出力を行います。

以下のコードでは、KEYSの出力のみがscreen/terminal/consoleにとどまっていることがわかりました。他のすべてのデータ(VALUES、ITEMS、および辞書キー 'テキスト'のVALUE)はすべて画面から消えます(データでコードを実行してください)。

ヘブライ語のテキスト(例:VALUES、ITEMS、VALUEは辞書キー 'text')を含むテキストであるため、標準のsysチェックを行い、次の出力を表示したため、 :

sys.stdin.encoding = cp1252 
sys.stdout.encoding = cp1252 

私は/エンコード/デコードを定義したり、Pythonの端末にUTF-8 UNICODE文字(ヘブライ語)の書かれた出力を可能にするために何かをする必要があるかもしれないことを把握します。

このアイデアを解決する方法はありますか?

## IMPORT NECESSARY MODULES 
import json 
import sys 

## CHECK ENCODING AND PRINT/TEST OUTPUT 
print("sys.stdin.encoding = ", sys.stdin.encoding) 
print("sys.stdout.encoding = ", sys.stdout.encoding) 

## READ JSON FILE & IMPORT DATA - UTF8 CODING TO READ HEBREW TEXT 
json_data = open('DATA_1GENESIS.json', encoding="utf8").read() 

## LOADS AND TRANSFORMS JSON DATA TO PYTHON DICTIONARY OBJECT 
DictionaryData = json.loads(json_data) 
print('\n') 
print("IMPORTED JSON DATA TYPE = ", type(DictionaryData)) 

## LOOP THROUGH DATA AND PRINT 
for item in DictionaryData: 
    print("ITEM = ",item, type(item), len(item))  

## TEST OUTPUT 
print('\n') 
print("IMPORTED DICTIONARY DATA = ",DictionaryData, type(DictionaryData),len(DictionaryData)) 

## EXTRACT DICTIONARY KEYS - 'dict_keys' object 
k = DictionaryData.keys() 
print('\n') 
print("KEYS = ",k,type(k),len(k)) 

## EXTRACT DICTIONARY VALUES - 'dict_values' object 
v = DictionaryData.values() 
print('\n') 
print("VALUES = ",v,type(v),len(v)) 

## EXTRACT DICTIONARY ITEMS - 'dict_items' object 
i = DictionaryData.items() 
print('\n') 
print("ITEMS = ",i,type(i),len(i)) 

## EXTRACT VALUE FOR KEY 'text' = DictionaryData['text'] 
text = DictionaryData['text'] 
print('\n') 
print("TEXT = ", text, type(text), len(text)) 

EDIT

私は唯一のUnicodeヘブライ語の1行の簡単な印刷をテストするためのテストをしました。ここにコードがあり、それはPython screen/terminal/consoleに出力を出力するためにはうまくいきました。だから質問が残っています:上記の辞書から抽出された値がスクリーンに印刷された後に消えてしまうのはなぜですか(あなた自身のためにデータでコードを試してみてください)。

python 3がデフォルトとして utf-8使用しているため、理由はあなたのエンコーディングではおそらくない
x = "בראשית ברא אלהים את השמים ואת הארץ" 
print("x = ",x) 
+1

ターミナルの使用 'cp1252'ならば、あなたは、端末内の構成を変更したり、設定を変更する方法を – furas

+0

の端末を変更する必要がありますか? –

答えて

1

コンソールには、ヘブライ語をサポートしていないconsolasというフォントが使用されている可能性があります。

courier newのようなフォントに変更すると、コンソールにヘブライ文字が表示されます。


ウィンドウ上では、単にウィンドウの上部にあるアイコンをクリックします(ウインドウがヘブライの場合は左上または右上にある必要があります)。

次に、プロパティ(הגדרות)を押して、希望のフォントを選択してください(私はcourier newをお勧めします)。

EDIT

問題は、テキスト内の文字\u05be(מקף)の使用のようです。ファイルをロードするとき、私は次のことを試してみましたし、それが必要として、それが働いた:

json_data = open('DATA_1GENESIS.json', encoding="utf8").read().replace('\u05be', '') 
+0

My Python 3.4.2 IDLEは既定ではすでに新しいフォントのcourierです。 –

+1

あなたはどんなキャラクターを見ますか?疑問符?またはgibrish? – Uriel

+0

上記のEDITをご覧ください。単純な文字列にヘブライ語のテキストを置いただけで、テストプリントがうまく動作します。 –

関連する問題