首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Unicode文本不打印到Python控制台/终端/屏幕

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

Stack Overflow用户
提问于 2016-10-29 19:56:03
回答 1查看 750关注 0票数 1

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

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

我能够成功地导入JSON数据。

我使用通常的数据提取测试+带有PRINT()的测试输出来检查数据。

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

我认为这是某种编码或解码问题,因为任何带有希伯来语文本的文本(例如,字典键“text”的值、项和值),所以我进行了标准sys检查并打印了以下输出:

代码语言:javascript
运行
复制
sys.stdin.encoding =  cp1252
sys.stdout.encoding =  cp1252

我想,我可能需要定义/编码/解码,或者做一些事情来允许将UTF-8 UNICODE字符(希伯来语)的书面输出发送到Python终端。

有什么办法解决这个问题吗?

代码语言:javascript
运行
复制
## 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屏幕/终端/控制台。因此,问题仍然存在:为什么从上面的字典中提取的值在打印到屏幕后会消失(请自己尝试使用这些数据来查看代码!)

代码语言:javascript
运行
复制
x = "בראשית ברא אלהים את השמים ואת הארץ"
print("x = ",x)
EN

回答 1

Stack Overflow用户

发布于 2016-10-29 20:00:52

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

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

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

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

然后点击属性(הגדרות)并选择您想要的字体(我建议使用הגדרות)。

编辑

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

代码语言:javascript
运行
复制
json_data = open('DATA_1GENESIS.json', encoding="utf8").read().replace('\u05be', '')
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40323116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档