【发布时间】: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