PostgreSQL导入含阿拉伯语UTF8 CSV报无效字节序列0xff如何解决
报错根因
错误代码22021对应的是编码不匹配问题,提示里的0xff是UTF-16LE(小端序UTF16)编码字节序标记(BOM)的首字节,说明你的CSV文件实际编码并非标注的UTF8,大概率是Windows环境下导出时默认生成了带BOM的UTF16文件,或是使用了阿拉伯语地区常用的Windows-1256 ANSI编码。
解决方法
方法1:转码为标准无BOM UTF-8(最推荐)
- 下载安装Notepad++,用它打开你的CSV文件,右下角会直接显示文件当前真实编码
- 点击顶部菜单栏「编码」→ 选择「转为UTF-8(无BOM)」,保存文件
- 重新执行原COPY语句即可正常导入
方法2:导入时指定文件实际编码
不想转码的话,直接在COPY语句中增加ENCODING参数指定真实编码即可:
- 如果文件实际是UTF16编码,执行语句:
COPY Dubai_201606 FROM 'C:\Users\king-\OneDrive\Bureau\201606.csv' WITH CSV HEADER ENCODING 'UTF16';
- 如果文件实际是Windows-1256阿拉伯语ANSI编码,执行语句:
COPY Dubai_201606 FROM 'C:\Users\king-\OneDrive\Bureau\201606.csv' WITH CSV HEADER ENCODING 'WIN1256';
异常排查
如果按上述方法操作后仍报错,可按以下顺序排查:
- 检查CSV表头行是否存在不可见特殊字符,可手动删除第一行表头重新输入后再试
- 确认阿拉伯语字段长度足够:PostgreSQL中VARCHAR类型长度默认按字符计数,若存储超长文本可临时将对应字段改为TEXT类型测试导入
内容的提问来源于stack exchange,提问作者Maliari Mohammed
相关产品推荐
相关产品推荐

