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

Unicode文本未打印到Python控制台/终端/屏幕,python,io,python-unicode,Python,Io,Python Unicode,我正试图用《圣经》中的希伯来文(Unicode)文本进行Python文本解析编程 下面是我从Sefaria.org使用的示例文本(Genesis)的链接: 我能够成功导入JSON数据 我使用PRINT()执行常规的数据提取测试+测试输出来检查数据 在下面的代码中,我注意到只有按键的输出保持在屏幕/终端/控制台上。所有其他数据(值、项和字典键“text”的值)都将从屏幕上消失(请使用数据运行代码并亲自查看) 我认为这是某种编码或解码问题,因为任何文本都包含希伯来文文本(例如,值、项和字典键“te

我正试图用《圣经》中的希伯来文(Unicode)文本进行Python文本解析编程

下面是我从Sefaria.org使用的示例文本(Genesis)的链接:

我能够成功导入JSON数据

我使用PRINT()执行常规的数据提取测试+测试输出来检查数据

在下面的代码中,我注意到只有按键的输出保持在屏幕/终端/控制台上。所有其他数据(值、项和字典键“text”的值)都将从屏幕上消失(请使用数据运行代码并亲自查看)

我认为这是某种编码或解码问题,因为任何文本都包含希伯来文文本(例如,值、项和字典键“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屏幕/终端/控制台。所以问题仍然存在:为什么上面从字典中提取的值在打印到屏幕上后会消失(请尝试代码中的数据以便自己查看!)


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

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

更改为类似“courier new”的字体,以在控制台中显示希伯来文字符


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

然后点击属性(properties)并选择您想要的字体(我建议
courier new

编辑 问题似乎在于文本中字符
\u05be
(מקף)的使用。加载该文件时,我尝试了以下操作,它正常工作:

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

如果终端使用cp1252,那么您必须更改终端中的配置或更改终端如何更改配置?您看到了哪些字符?问号?还是gibrish?请参见上面的编辑。当我将希伯来文文本放在一个简单的字符串中时,测试打印效果很好。我使用了您的代码,但它仍然没有解决我描述的Python屏幕/控制台/终端输出消失的问题。你为什么说它能正常工作?您提出的解决方案中有什么有用的地方?您是否复制/粘贴了我的代码,并试图看到我所描述的输出消失的问题?是的。全部打印出来,还有希伯来文文本
json_data = open('DATA_1GENESIS.json', encoding="utf8").read().replace('\u05be', '')