额外的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']
不支持的编解码器
根据全面的代码页列表,此包尚不支持一些额外的编解码器。可能的原因和解决方案是
它是一个双字节编解码器,例如 cp834(韩国)。技术上 CodecMapper 可以很容易地通过将映射大小从 256 增加到 65536 来支持它们。但由于缺乏测试数据和访问亚洲大型机,这被认为目前过于实验性。
该编解码器包含组合字符,例如 cp1132(老挝),它允许通过组合几个字符来表示超过 256 个字符。
Java 不包含相应代码页的映射,例如 cp410/880(西里尔文)。您可以根据上述链接中找到的信息添加此类编解码器,并向 Java 标准库提交增强请求。一旦发布,只需将新编解码器添加到下面的 build.xml 中即可。
我遗漏了一个编解码器。只需在 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
首次公开发布
项目详情
下载文件
下载适用于您平台的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。