如何在Python中将特殊字符写入DBF文件?

2024-09-30 22:13:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将这个字符É写入DBF文件,但是我一直得到UnicodeEncodeError。在

我是这样做的:

def write_into_file(value):
    verdata_table = dbf.Table('VerData.dbf', 'VERS_BDD C(50);')

    verdata_table.open(mode=dbf.READ_WRITE)
    for record in ({"vers_bdd": value},):  # value contains the special character É
        verdata_table.append(record)  

我只想把这个字符写到DBF文件中。我想这与试图将字符串写入文件时的编码有关,但我不太确定。在

这里的错误:
UnicodeEncodeError: 'ascii' codec can't encode character '\xc9' in position 0: ordinal not in range(128)

编辑

1)这里是完整的回溯:

^{pr2}$

2)这里repr(value)的输出:
'Éri'


Tags: 文件invaluedeftablerecord字符file
3条回答

您需要重写默认的输入编码ascii。将输入编码设置为“utf-8”,如下所示

dbf.input_decoding = "utf-8"

在此之后,您可以打开并写入文件。在

最佳答案取决于此表是否仅用于Python和dbf1,或者是否需要与其他程序共享它。在

@snakecharmerb是正确的,您需要在创建dbf文件时提供适当的代码页,如果它只用于Python和dbf包,那么您可以指定'utf8'(而不是{}),但据我所知,这不是dbf文件的行业标准规范。在

如果需要与其他程序共享该文件,则需要确定many code pages3中哪一个适合您的数据集4。在

创建文件时,添加代码页:

dbf.table(table_name, table_fields, codepage=...)

1披露:我是^{}的作者。在

2我添加'utf8'主要是为了方便自己。在

3请参阅有关DOS和Windows仿真代码页的部分。在

4当前支持的代码页使用十六进制代码或元组对中的第一个字符串:

^{pr2}$

从源代码看,Table对象在其__init__方法中接受一个codepage参数,该参数将覆盖默认值,即ASCII。因此,您可能需要创建如下表:

def write_into_file(value):
    verdata_table = dbf.Table('VerData.dbf', 'VERS_BDD C(50);', codepage=0xf0)

0xf0是dbf用于UTF-8的十六进制代码-参见dbf/__init__.py中的表)

相关问题 更多 >