向DBF文件写入字符串时出现Overflow Error问题求助
解决DBF字段写入Overflow Error的方案
问题分析
你遇到的Overflow Error: tried to store 35 bytes in 30 byte field,本质是NOMBRE字段预定义长度为30字节,而要写入的内容编码后字节数超出限制,且字段长度无法修改、不能更换dbf库。
解决方案
核心是在写入前将字符串处理为编码后字节数≤30,同时避免截断多字节字符导致乱码:
- 实现字节安全的截断函数
def truncate_to_byte_limit(s, max_bytes=30, encoding='cp1252'): # 编码参数根据你的DBF实际编码调整,cp1252是DBF默认常见编码 encoded = s.encode(encoding) if len(encoded) <= max_bytes: return s # 截断到最大字节数,再修复可能的不完整多字节字符 truncated_encoded = encoded[:max_bytes] while True: try: return truncated_encoded.decode(encoding) except UnicodeDecodeError: truncated_encoded = truncated_encoded[:-1]
- 修改原代码中NOMBRE字段的赋值逻辑
把原代码里的:
tupla['NOMBRE']=tipo_3[recno-1,3]
替换为:
nombre_content = tipo_3[recno-1,3] tupla['NOMBRE'] = truncate_to_byte_limit(nombre_content)
额外说明
- 可通过
DBF.encoding查看你的DBF文件编码,若为GBK等其他编码,需调整函数中的encoding参数,否则字节长度计算会出错。 - 若业务需要,可在截断后添加省略号(比如
truncated_str + '...'),但要确保加上省略号后的总字节数不超过30。
内容的提问来源于stack exchange,提问作者vulpes axis
相关产品推荐
相关产品推荐

