[英]Writing dbf file with custom encoding (DBF Package)
我有一些波斯语字符,我想用我的自定义代码页将它们写入 dbf 文件,每个字符 1 个字节。 我认为可以通过以下两种方式之一解决此问题:
1-将我的自定义代码页传递给 dbf 表。
2- 直接将二进制数据写入 dbf 文件,不使用dbf 包的默认代码页(即 utf8)。
我怎样才能用这两种方法中的任何一种来解决这个问题?
这是代码:
import dbf
man = 'مرد'
woman = 'زن'
row1 = (man, woman)
row2 = (man, woman)
with open('./file.dbf', 'w') as f:
table = dbf.Table(filename='./file.dbf',
field_specs='field1 C(3); field2 C(3)', codepage='customCodePage', on_disk=True)
table.open(dbf.READ_WRITE)
table.append(row1)
table.append(row2)
table.close()
dbf
旨在与现有代码页一起使用,因此未考虑自定义代码页。
如果你喜欢冒险:
dbf.code_pages
添加一个自定义数字,带有短和长描述(例如dbf.code_pages[0xa1] = ('farsi','single-byte farsi code page')
codecs
模块注册您的自定义代码页,以便codecs.getdecoder('farsi')
和codecs.getencoder('farsi')
(或您选择使用的任何名称)返回适当的解码器/编码器在尝试注册我的编解码器后,我最终将我的数据从 utf8 转换为“自定义波斯语编解码器”,然后转换为具有相同十进制代码点的 windows-1256 的等效字符。 所以当用户使用自定义编解码器读取数据时,windows-1256 字符会指向自定义编解码器中的右小数点,当然这种原始形式的字符是没有意义的。
例如,Unicode 中的字母 پ 的十进制代码点为 1662,而在自定义编解码器中,它的代码点为 148。windows-1256 中 148 代码点的等价物是“。 所以 پ 使用 3 个不同的字典翻译为 ”。 我对波斯语键盘中的所有字符都这样做了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.