写入自定义编码的dbf文件(dbf包)



我有一些波斯语字符,我想用我的自定义代码页将它们写入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码点的是"。因此,"用三种不同的词典"翻译过来就是"用三种不同的词典"。我对波斯语键盘中的所有字符都这样做。

最新更新