python3 dbf模块。麻烦与appen西里尔文latters

时间:2018-03-20 15:20:07

标签: python dbf

尝试制作dbf,一切正常,但如果我试图附加西里尔语后者:

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

我知道python有unicode的问题,但可能在某种程度上不能把cyrillic latters放在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位的西里尔字母

1 个答案:

答案 0 :(得分:0)

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

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

如果你不能自己创建dbf,但是你使用的其他任何软件都已经破坏了足以读取ASCII指定的dbf文件中的非ASCII数据,那么只要在Python中打开表,就可以简单地覆盖代码页(它与上面相同,但没有现场规范):

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

或者,如果您只使用Python,并且只使用dbf模块,则可以尝试'utf8'的未记录且不兼容的其他dbf库代码页 - 如果你会想要使你的字符字段更大,因为表示某些Unicode代码点所需的字节数大于1(最坏的情况是每个代码点四个字节,所以安全的路径是增加字符字段的大小为四次;即C(6)字段为C(24))。

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