读取CSV导入SQLite出现乱码、空格被替换为换行符问题如何解决?
问题原因
你观察到的Â字符和空格转换行问题均由编码不匹配导致:
你当前使用的windows-1250编码和CSV文件实际编码不符,文件本身为带非断空格的UTF-8编码:UTF-8编码下的非断空格(U+00A0)对应字节为0xC2 0xA0,用Windows-1250解码时0xC2会被解析为Â,0xA0会被识别为特殊空白符,最终出现转义错误变成换行。
修复方案
按以下步骤调整即可解决:
- 把
CsvOptions的encoding参数替换为utf-8-sig,该编码会自动处理UTF-8文件的BOM头和非断空格识别问题,是各类导出CSV最常用的兼容编码 - 可选增加字段清洗逻辑,批量清除表头和内容中多余的换行、连续空白字符
修改后的完整代码如下:
import csv_to_sqlite import sqlite3 import pandas as pd # 替换编码为utf-8-sig解决字符识别错误 options = csv_to_sqlite.CsvOptions(typing_style='full', encoding='utf-8-sig') input_file = ["./datasets/choco_flavors/flavors_of_cacao.csv"] csv_to_sqlite.write_csv(input_file, "flavors_of_cacao.sqlite", options) con = sqlite3.connect("flavors_of_cacao.sqlite") filter_data = pd.read_sql_query("SELECT * FROM flavors_of_cacao", con) # 可选:批量清理所有字段的多余换行、连续空白 filter_data.columns = filter_data.columns.str.replace(r'\s+', ' ', regex=True).str.strip() for col in filter_data.select_dtypes(include='object').columns: filter_data[col] = filter_data[col].str.replace(r'\s+', ' ', regex=True).str.strip()
前置验证方法
如果调整后仍有异常,可以先单独读取CSV验证编码正确性,避免重复写入SQLite浪费时间:
import pandas as pd df = pd.read_csv("./datasets/choco_flavors/flavors_of_cacao.csv", encoding='utf-8-sig') # 输出第一列表头确认正常后再执行转SQLite逻辑 print(df.columns[0])
如果输出结果为正常的Company (Maker-if known),则代表编码匹配无误。
内容的提问来源于stack exchange,提问作者Nat
相关产品推荐
相关产品推荐

