You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中读取并导入UTF-16编码的大量XML文件?

解决PostgreSQL读取UTF-16编码XML文件的错误

问题原因

你遇到的ERROR: invalid byte sequence for encoding "UTF8": 0xff错误,是因为XML文件采用UTF-16编码(包含开头的BOM字节0xff),但你在convert_from中错误指定了源编码为UTF8,导致PostgreSQL尝试用UTF-8规则解析UTF-16字节流,触发编码不兼容错误。

正确解决方案

根据XML文件的UTF-16类型(带BOM/无BOM、LE/BE),修改convert_from的编码参数即可:

1. 带BOM的UTF-16文件(最常见,Windows生成的UTF-16文件通常带BOM)

直接使用UTF16作为编码参数,PostgreSQL会自动识别BOM并处理字节序:

SELECT
    XMLPARSE(DOCUMENT convert_from(
        pg_read_binary_file('C:/Program Files/PostgreSQL/10/data/xmls/test'), 'UTF16'));

2. 无BOM的UTF-16LE文件

如果文件是小端字节序且无BOM,指定UTF-16LE:

SELECT
    XMLPARSE(DOCUMENT convert_from(
        pg_read_binary_file('C:/Program Files/PostgreSQL/10/data/xmls/test'), 'UTF-16LE'));

3. 无BOM的UTF-16BE文件

如果文件是大端字节序且无BOM,指定UTF-16BE:

SELECT
    XMLPARSE(DOCUMENT convert_from(
        pg_read_binary_file('C:/Program Files/PostgreSQL/10/data/xmls/test'), 'UTF-16BE'));

批量处理建议

如果有大量XML文件,建议先批量将UTF-16文件转换为UTF-8格式后再导入,避免逐个处理编码差异。可以用iconv工具完成批量转换:

# 遍历当前目录下所有xml文件,转换为UTF-8并添加_utf8后缀
for file in *.xml; do
    iconv -f UTF-16 -t UTF-8 "$file" > "${file%.xml}_utf8.xml"
done

内容的提问来源于stack exchange,提问作者Scorpion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:35:19