尝试制作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位的西里尔字母
答案 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
模块的作者。