news 2026/4/18 17:19:02

Postgres+ODBC+OTL windows客户端C++代码乱码问题(附源码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Postgres+ODBC+OTL windows客户端C++代码乱码问题(附源码)

在新项目POC时,AI助手快速生成的验证项目,后台C++ OTL实现快速SQL业务代码,通过ODBC连接PostgreSQL,发现C++控制台输出cout 乱码,DBeaver或Postgres后台psql查询数据乱码,引发问题多方排查未解决,特此留痕。供参考。

源码下载:参考附件。

项目背景:C++ OTL模板业务代码,psqlODBC驱动,Postgres后台部署在Ubuntu2404,ver18.3

其中C++项目CMakelists.txt 设置:add_definitions(-DUNICODE -D_UNICODE)

main.cpp 使用utf8编码,设置控台输出utf8:
在:

main(){

#ifdef _WIN32

SetConsoleOutputCP(CP_UTF8);

#endif

// todo...

}

一、检查Postgres后台,客户端字符集:

部署postgres服务端Ubuntu登录psql后执行:

select name, setting, context from pg_settings where name like '%encoding%';

二、检查代码层控制台输出

2.1 cout << "测试中文";

预期:显示正常“测试中文”

2.2 设置ODBC连接串DSN:关键必须加“ConnSettings=SET CLIENT_ENCODING TO 'UTF8';”

无论是使用DRIVER={PostgreSQL Unicode(x64)} 还是 DRIVER={PostgreSQL ANSI(x64)}

参考DSN:

// 使用Unicode驱动 const string CONNECTION_STR_W = "DRIVER={PostgreSQL Unicode(x64)};" "SERVER=192.168.1.15;" "PORT=5432;" "DATABASE=postgres;" "UID=postgres;" "PWD=tlox@2026;" "ConnSettings=SET CLIENT_ENCODING TO 'UTF8';"; // "ClientEncoding=UTF-8"; // 使用ANSI驱动 const string CONNECTION_STR_A = "DRIVER={PostgreSQL ANSI(x64)};" "SERVER=192.168.1.15;" "PORT=5432;" "DATABASE=postgres;" "UID=postgres;" "PWD=tlox@2026;" "ConnSettings=SET CLIENT_ENCODING TO 'UTF8';"; // "ClientEncoding=UTF-8" // "Debug=1"; // ANSI 驱动可以指定字符集

三、结果验证:

参考步骤2中设置DSN串包含:ConnSettings=SET CLIENT_ENCODING TO 'UTF8'; 时,Postgres服务端查询数据正常,DBeaver查询数据正常

反例验证:

注释或删除DSN中包含:ConnSettings=SET CLIENT_ENCODING TO 'UTF8';

重新编译运行,运行效果:

控制台输出正常:

数据库后台数据乱码

工具查询数据(乱码):

再次验证:DSN加上:ConnSettings=SET CLIENT_ENCODING TO 'UTF8';

结果:恢复正常。

切换驱动方式验证:默认是ANSI,即 CONNECTION_STR_A

切换到:CONNECTION_STR_W,即Unicode,效果类型,

关键还是:ConnSettings=SET CLIENT_ENCODING TO 'UTF8'; 影响最后数据。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 22:12:36

Pixel Language Portal部署教程:Hunyuan-MT-7B在国产统信UOS系统兼容性验证

Pixel Language Portal部署教程&#xff1a;Hunyuan-MT-7B在国产统信UOS系统兼容性验证 1. 产品概述 Pixel Language Portal&#xff08;像素语言跨维传送门&#xff09;是一款基于腾讯Hunyuan-MT-7B大模型构建的创新翻译工具。它将传统翻译功能与16-bit像素冒险游戏风格完美…

作者头像 李华
网站建设 2026/4/17 23:31:25

基于cnn的yolov8+sar图像识别 sar建筑物旋转目标检测与部署

SAR 图像建筑物检测项目详细说明 yolov8sar图像建筑物旋转目标检测与部署 引言 随着城市化进程的加速和对地理信息系统的依赖不断增加&#xff0c;精确的建筑物检测成为了一个关键任务。合成孔径雷达&#xff08;SAR&#xff09;图像因其全天候、全时段的优势&#xff0c;在遥感…

作者头像 李华
网站建设 2026/4/18 17:55:46

AI智能体视觉检测系统(TVA)工作原理系列(十七)

——不再“一本正经地胡说八道”&#xff1a;TVA的热力图是怎么帮你找到缺陷的&#xff1f;很多刚接触AI的黑盒系统时&#xff0c;最痛苦的不是调参&#xff0c;而是“背锅”。产线报警了&#xff0c;产线长跑过来骂&#xff1a;“你们这破机器又乱报错了&#xff01;”你看着屏…

作者头像 李华
网站建设 2026/4/18 18:19:50

c语言第一个编译器是用什么语言写的?自举原理

你可曾思考过如下问题&#xff0c;世界上首个C语言编译器&#xff0c;它究竟是运用何种语言编写而成的&#xff1f;要解开这个谜团&#xff0c;我们得回到计算机的起点CPU真正能够读懂的&#xff0c;仅仅是那由0和1所构成的机器语言&#xff0c;这是所有故事得以矗立的基石。那…

作者头像 李华