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

PostgreSQL COPY命令输出CSV出现替换字符�如何解决?

解决PostgreSQL COPY命令输出CSV时Unicode字符乱码问题

核心原因

PostgreSQL的COPY TO stdout默认使用数据库编码输出,若输出编码与Java读取时使用的编码不匹配,就会导致Unicode字符被替换为�。

解决步骤

1. 强制COPY命令输出UTF-8编码

修改COPY命令,显式指定编码为UTF-8,确保输出内容编码统一:

COPY (<query>) TO stdout (FORMAT csv, ENCODING 'UTF8');

2. Java读取流时指定UTF-8编码

Java读取进程的stdout流时,必须明确使用UTF-8编码,避免依赖系统默认编码(不同系统默认编码可能不一致):

Process process = ...; // 执行COPY命令的进程实例
try (BufferedReader reader = new BufferedReader(
        new InputStreamReader(process.getInputStream(), StandardCharsets.UTF_8))) {
    String line;
    while ((line = reader.readLine()) != null) {
        // 处理每行CSV内容
    }
}

3. 确认数据库存储编码

确保PostgreSQL数据库及对应表的编码为UTF-8(如UTF8或UTF8MB4),若存储时编码不支持Unicode,输出时无法正确保留字符。可通过以下SQL查询数据库编码:

SHOW server_encoding;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 13:35:55