我试图将这个字符É
写入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'
您需要重写默认的输入编码
ascii
。将输入编码设置为“utf-8”,如下所示在此之后,您可以打开并写入文件。在
最佳答案取决于此表是否仅用于Python和
dbf
包1,或者是否需要与其他程序共享它。在@snakecharmerb是正确的,您需要在创建dbf文件时提供适当的代码页,如果它只用于Python和}),但据我所知,这不是dbf文件的行业标准规范。在
dbf
包,那么您可以指定'utf8'
(而不是{如果需要与其他程序共享该文件,则需要确定many code pages3中哪一个适合您的数据集4。在
创建文件时,添加代码页:
1披露:我是^{} 的作者。在
2我添加
'utf8'
主要是为了方便自己。在3请参阅有关DOS和Windows仿真代码页的部分。在
4当前支持的代码页使用十六进制代码或元组对中的第一个字符串:
^{pr2}$从源代码看,
Table
对象在其__init__
方法中接受一个codepage参数,该参数将覆盖默认值,即ASCII。因此,您可能需要创建如下表:(
0xf0
是dbf用于UTF-8的十六进制代码-参见dbf/__init__.py
中的表)相关问题 更多 >
编程相关推荐