Python如何正确打印cp1258越南语字符?

您所在的位置:网站首页 越南语编码格式 Python如何正确打印cp1258越南语字符?

Python如何正确打印cp1258越南语字符?

#Python如何正确打印cp1258越南语字符?| 来源: 网络整理| 查看: 265

如何在 python 3 中正确打印越南语 cp1258 编码字符?我的终端似乎不是问题,因为它将正确打印我的代码中的第一个打印语句。我正在尝试将十六进制字符解码为越南语

代码:

import binascii data = 'tạm biệt' print(data) # tạm biệt a = binascii.hexlify(data.encode('cp1258', errors='backslashreplace')) print(a) # b'745c75316561316d2062695c753165633774' # if i dont use the error handler here, then I get a UnicodeEncodeError for \u1ea1 print( binascii.unhexlify(a).decode('cp1258') # t\u1ea1m bi\u1ec7t )

最佳答案

Python对code page 1258的支持似乎有遗漏。旧版编解码器确实通过组合变音符号的方式支持越南语,但 Python 不知道如何将 Unicode 转换为这些组合。我想您必须执行自己的转换。

第一步,观察 unicodedata.normalize('NFD', data) 将表示形式拆分为一个基本字符和一系列组合变音符号。

>>> unicodedata.normalize('NFD', data).encode('utf-8') b'ta\xcc\xa3m bie\xcc\xa3\xcc\x82t' >>> '{0:04x}'.format(ord(b'\xcc\xa3'.decode('utf-8'))) '0323'

所以 U+0323 是点下的组合 Unicode 变音符号,编解码器应该知道这种对应关系(我上面链接到的维基百科页面显示了 CP1258 的相同 Unicode 字符代码)代码点 0xF2)。

我对目标编解码器了解不够,无法告诉您如何将它们映射到 CP1258,但如果您幸运的话,Python 编解码器中已经存在这些的某种映射。

我的 Mojave MacOS 上的

iconv 似乎可以顺利转换:

$ iconv -t cp1258


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3