繁体   English   中英

使用自定义编码编写 dbf 文件(DBF 包)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM