【问题标题】:Unicode Text Not Printing to Python Console/Terminal/ScreenUnicode 文本未打印到 Python 控制台/终端/屏幕
【发布时间】:2016-10-29 19:56:03
【问题描述】:

我正在尝试使用来自 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 和字典键“text”的 VALUE)都从屏幕上消失(请使用数据运行代码并亲自查看)。

我认为这是某种编码或解码问题,因为任何带有希伯来语文本的文本(例如字典键“文本”的 VALUES、ITEMS 和 VALUE),所以我进行了标准 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)

【问题讨论】:

  • 如果终端使用cp1252,那么您必须在终端中更改配置或更改终端
  • 如何更改配置?

标签: python io python-unicode


【解决方案1】:

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

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

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


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

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

编辑

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

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

【讨论】:

  • 你看到了什么字符?问号?还是乱码?
  • 请参阅上面的编辑。当我将希伯来语文本放在一个简单的字符串中时,测试打印效果很好。
  • 我使用了你的代码,但它仍然没有解决我描述的 Python 屏幕/控制台/终端输出消失的问题。你为什么说它应该发挥作用?您提出的解决方案有何作用?
  • 您是否复制/粘贴了我的代码并尝试查看我所描述的输出消失的问题?
  • 是的。将所有内容连同希伯来文文本打印出来
猜你喜欢
  • 2014-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多