python3 dbf 模块。 appen 西里尔字母的问题

python3 dbf module. trounle with appen cyrillic latters

尝试制作 dbf,一切正常,但如果我尝试附加西里尔字母:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-6: ordinal not in range(128)

我知道 python 有 unicode 问题,但我可能无法在 dbf 中放入西里尔字母后者?

代码:

table = dbf.Table(ex_file_name)
table.open(mode=dbf.READ_WRITE)
for r in rows_massive:
    table.append(
        (datetime.strptime(r[0], '%d.%m.%Y'), r[1], r[2], PLACEPAY, prefix_name))

PLACEPAY 支付在 0-6 位有西里尔字母后缀

问题是 dbf 不是用 code-page 创建的,所以它默认为 ASCII。您可以尝试使用代码页 866(俄语)创建 table。如果使用 dbf1 模块创建,它看起来像这样:

table = dbf.Table('filename.dbf', 'field1 D, field2 C(10), ...,'  codepage='cp866')

如果您不能自己创建 dbf,但是您使用的任何其他软件都损坏到足以读取 ASCII-specified dbf 文件中的 non-ASCII 数据,那么您可以在任何时候简单地覆盖代码页你在Python中打开table(和上面一样,但是没有字段说明):

table = dbf.Table('filename.dbf', codepage='cp866')

或者,如果您只使用 Python,并且只使用 dbf 模块,您可以尝试 'utf8' 的未记录和 incompatible-with-other-dbf-libraries 代码页 - - 如果你这样做,你会想让你的字符字段更大,因为表示某些 Unicode code-points 所需的字节数大于一个(最坏的情况是每个 code-point 四个字节,所以安全路线是将字符字段的大小增加四倍;即 C(6) 字段将是 C(24)).


1 披露:我是 dbf 模块的作者。