Unicode文本不打印到Python控制台/终端/屏幕

时间:2016-10-29 19:56:03

标签: python io python-unicode

我正在尝试使用Torah中的希伯来语(Unicode)文本进行一些Python文本解析编程。

这是我从Sefaria.org使用的示例文本(Genesis)的链接: https://github.com/Sefaria/Sefaria-Export/blob/master/json/Tanakh/Torah/Genesis/Hebrew/Tanach%20with%20Text%20Only.json

我能够成功导入JSON数据。

我通常使用数据提取测试+ TEST OUTPUTS WITH PRINT()来检查数据。

在下面的代码中,我注意到只有KEYS的输出保留在屏幕/终端/控制台上。所有其他数据(VALUES,ITEMS和词典键的值以及文本')都从屏幕上消失(请运行包含数据的代码并亲自查看)。

我认为这是某种编码或解码问题,因为任何带有希伯来语文本的文本(例如字典键的VALUES,ITEMS和VALUE' text'),所以我做了标准的sys检查和打印出以下输出:

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

我认为我可能需要定义/编码/解码或做一些事情以允许将UTF-8 UNICODE字符(希伯来语)的写入输出到Python终端。

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

## 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))

修改

我刚做了一个测试来测试只有Unicode希伯来语的一行的简单打印。这是代码,它完美地将输出打印到Python屏幕/终端/控制台。所以问题仍然存在:为什么在打印到屏幕后,上面字典中提取的值会消失(请尝试使用数据代码为自己查看!)

x = "בראשית ברא אלהים את השמים ואת הארץ"
print("x = ",x)

1 个答案:

答案 0 :(得分:3)

这可能不是因为您的编码,因为python 3使用utf-8作为默认值。

更可能的问题是您的控制台使用了没有希伯来语支持的字体consolas

更改为courier new之类的字体,以在控制台中显示希伯来字符。

在Windows上 - 只需点击窗口顶部的图标(如果您的窗口是希伯来语,则应该是左上角或右上角)。

然后点击属性(הגדרות)并选择你想要的字体(我推荐courier new)。

修改

问题似乎是在文本中使用了字符\u05be(מקף)。我在加载文件时尝试了以下操作,它按原样运行:

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