跳转到主要内容

额外的EBCDIC编码器

项目描述

ebcdic 是一个Python包,为与旧系统交换数据添加了额外的EBCDIC编码器。它适用于Python 2.7和Python 3.4+。

EBCDIC 是扩展二进制编码的十进制交换代码的缩写,是一组主要在大型机计算机上使用的字符编码。除非您必须与仍仅支持EBCDIC作为字符编码的旧系统交换数据,否则使用它实际上没有真正的意义。

安装

可以从 https://pypi.python.org/pypi/ebcdic 获取 ebcdic 包,并使用pip进行安装

pip install ebcdic

示例用法

在讲德语的国家的EBCDIC系统上编码 'hello world',请使用

>>> import ebcdic
>>> 'hello world'.encode('cp1141')
b'\x88\x85\x93\x93\x96@\xa6\x96\x99\x93\x84O'

支持的编码器

ebcdic 包包括以下地区的EBCDIC编码器

  • cp290 - 日本(片假名)

  • cp420 - 阿拉伯双语

  • cp424 - 以色列(希伯来语)

  • cp833 - 韩国扩展(单字节)

  • cp838 - 泰国

  • cp870 - 东欧(波兰、匈牙利、捷克、斯洛伐克、斯洛文尼亚、克罗地亚、塞尔维亚、保加利亚);代表Latin-2

  • cp1097 - 伊朗(波斯语)

  • cp1140 - 澳大利亚、巴西、加拿大、新西兰、葡萄牙、南非、美国

  • cp1141 - 奥地利、德国、瑞士

  • cp1142 - 丹麦、挪威

  • cp1143 - 芬兰、瑞典

  • cp1144 - 意大利

  • cp1145 - 拉丁美洲,西班牙

  • cp1146 - 英国,爱尔兰,北爱尔兰

  • cp1147 - 法国

  • cp1148 - 国际

  • cp1148ms - 国际,微软解释;与 cp1148 类似,但 0x15 被映射到 0x85(“下一行”)而不是 0x0a(“换行”)

  • cp1149 - 冰岛

还包括了旧的编解码器

  • cp037 - 澳大利亚,巴西,加拿大,新西兰,葡萄牙,南非;与 cp1140 类似,但没有欧元符号

  • cp273 - 奥地利,德国,瑞士;与 cp1141 类似,但没有欧元符号

  • cp277 - 丹麦,挪威;与 cp1142 类似,但没有欧元符号

  • cp278 - 芬兰,瑞典;与 cp1143 类似,但没有欧元符号

  • cp280 - 意大利;与 cp1141 类似,但没有欧元符号

  • cp284 - 拉丁美洲,西班牙;与 cp1145 类似,但没有欧元符号

  • cp285 - 英国,爱尔兰,北爱尔兰;与 cp1146 类似,但没有欧元符号

  • cp297 - 法国;与 cp1147 类似,但没有欧元符号

  • cp500 - 国际;与 cp1148 类似,但没有欧元符号

  • cp500ms - 国际,微软解释;与 codecs.cp500 相同,类似于 ebcdic.cp500,但 0x15 被映射到 0x85(“下一行”)而不是 0x0a(“换行”)

  • cp871 - 冰岛;与 cp1149 类似,但没有欧元符号

  • cp875 - 希腊;与 cp9067 类似,但没有欧元符号和一些其他字符

  • cp1025 - 西里尔文

  • cp1047 - 开放系统(MVS C 编译器)

  • cp1112 - 爱沙尼亚,拉脱维亚,立陶宛(波罗的海)

  • cp1122 - 爱沙尼亚;与 cp1157 类似,但没有欧元符号

  • cp1123 - 乌克兰;与 cp1158 类似,但没有欧元符号

标准库中的编解码器覆盖了一些这些编解码器。在撰写本文时,这包括 cp037,cp273(自 3.4 版起),cp500 和 cp1140。

要查看由不同来源提供的 EBCDIC 编解码器的列表,请使用 ebcdic.ignored_codec_names()。例如,使用 Python 3.6 的结果如下

>>> ebcdic.ignored_codec_names()
['cp037', 'cp1140', 'cp273', 'cp424', 'cp500', 'cp875']

不支持的编解码器

根据全面的代码页列表,此包尚不支持一些额外的编解码器。可能的原因和解决方案是

  1. 它是一个双字节编解码器,例如 cp834(韩国)。技术上 CodecMapper 可以很容易地通过将映射大小从 256 增加到 65536 来支持它们。但由于缺乏测试数据和访问亚洲大型机,这被认为目前过于实验性。

  2. 该编解码器包含组合字符,例如 cp1132(老挝),它允许通过组合几个字符来表示超过 256 个字符。

  3. Java 不包含相应代码页的映射,例如 cp410/880(西里尔文)。您可以根据上述链接中找到的信息添加此类编解码器,并向 Java 标准库提交增强请求。一旦发布,只需将新编解码器添加到下面的 build.xml 中即可。

  4. 我遗漏了一个编解码器。只需在 Github 上打开一个问题https://github.com/roskakori/CodecMapper/issues,它将在下一个版本中添加。

源代码

这些编解码器已使用 CodecMapper 生成,可从https://github.com/roskakori/CodecMapper 获取。阅读 README 以从源代码构建 ebcdic 软件包。

要添加另一个 8 位 EBCDIC 编解码器,请在 build.xml 中的 ebcdic 目标中进行扩展,例如使用一行

<arg value="cpXXX" />

XXX 替换为您想要包含的 8 位代码页编号。

然后运行

ant test

以构建和测试发行版。

自动将新编码包含在包中,并在 import ebcdic 时由 ebcdic/__init__.py 进行注册,因此不需要采取其他步骤。

变更

版本 1.1.1,2019-08-09

  • 将许可证信息从README移动到LICENSE(#5)。这要求分发从sdist更改为wheel,因为显然以平台无关的方式包含文本文件是一项重大挑战(#11)。

    遗憾的是,这破坏了与Python 2.6、3.1、3.2和3.3的兼容性。如果您仍然需要这些Python版本中的任何一个的ebcdic,请使用ebcdic-1.0.0

    这需要进行多次尝试和中间版本,这些版本在不同平台上以不同的方式损坏。为了避免人们意外安装这些损坏的版本,它们已经被从PyPI中删除。如果您仍然想查看它们,请使用相应的标签

版本 1.0.0,2019-06-06

  • 将开发状态更改为“生产/稳定”。

  • 添加了国际代码页cp500ms和cp1148ms,这是对相应IBM代码页的Microsoft解释。唯一的不同之处在于,0x1f映射到0x85(“下一行”)而不是0x0a(“换行”)。请注意,Python标准库中包含的codecs.cp500也使用Microsoft解释(#4)。

  • 添加了阿拉伯双语代码页420。

  • 添加了波罗的海代码页1112。

  • 添加了西里尔代码页1025。

  • 添加了东欧代码页870。

  • 添加了爱沙尼亚代码页1122和1157。

  • 添加了希腊代码页875。

  • 添加了波斯双语代码页1097。

  • 添加了希伯来代码页424和803。

  • 添加了韩文代码页833。

  • 添加了地中海/法语代码页425。

  • 添加了日文(片假名)代码页290。

  • 添加了泰国代码页838。

  • 添加了土耳其代码页322。

  • 添加了乌克兰代码页1123。

  • 添加了Python 3.5到3.8作为支持版本。

  • 改进了生成的编码器的PEP8合规性。

版本 0.7,2014-11-17

  • 明确了哪些编码器已经包含在标准库中,并且这些编码器会覆盖ebcdic包。还添加了一个名为ebcdic.ignored_codec_names()的函数,该函数返回通过其他方式提供的EBCDIC编码器的名称。要访问被标准库覆盖的ebcdic编码器,请使用ebcdic.lookup()

  • 清理了(PEP8,__all__,错别字等)。

版本 0.6,2014-11-15

  • 添加了对Python 2.6+和3.1+的支持(#1)。

  • 包含了一个修改后的gencodec.py版本,它仍然构建映射而不是表,因此生成的编码器可以与3.3之前的Python版本一起工作。它还执行了from __future__ import unicode_literals,因此编码器甚至可以使用相同的源代码在Python 2.6+中使用。作为副作用,这简化了编码器的构建,因为它消除了需要本地CPython源代码副本的需要。

版本 0.5,2014-11-13

  • 首次公开发布

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源分布

此版本没有可用的源分布文件。请参阅生成分布存档的教程。

构建分布

ebcdic-1.1.1-py2.py3-none-any.whl (128.5 kB 查看散列

上传于 Python 2 Python 3

由以下支持