PostgreSQL C++ libpq 编码 UTF-8 问题
PostgreSQL C++ libpq encoding UTF-8 problem
我在PGAdmin或psql控制台中使用直接sql命令插入UTF-8(在我的情况下是韩语字符(没有问题。但是当我需要使用libpq库在C++中插入值时,我遇到了编码错误,直到现在我才解决它。
我已经测试了数据库连接等,效果很好。所以我只会分享插入代码:
/* INSERT demo */
res = PQexec(conn,
"insert into db_test values('testval', '군포지사','N00225','영동선','0500','E',13.67,14.18);");
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
std::cout << "Insert into table failed: " << PQresultErrorMessage(res)
<< std::endl;
}
else
std::cout << "inserted" << std::endl;
PQclear(res);
下面是错误:
Insert into table failed: ERROR: invalid byte sequence for encoding "UTF8": 0xb1
我已经设法解决了它,很抱歉我对编码处理缺乏了解。我只需要将 ANSI 转换为 UTF-8,下面是我的工作代码。如果有更好的解决方案,请发布您的答案。
int AnsiToUTF8(char* szSrc, char* strDest, int destSize)
{
WCHAR szUnicode[255];
char szUTF8code[255];
int nUnicodeSize = MultiByteToWideChar(CP_ACP, 0, szSrc, (int)strlen(szSrc), szUnicode, sizeof(szUnicode));
int nUTF8codeSize = WideCharToMultiByte(CP_UTF8, 0, szUnicode, nUnicodeSize, szUTF8code, sizeof(szUTF8code), NULL, NULL);
assert(destSize > nUTF8codeSize);
memcpy(strDest, szUTF8code, nUTF8codeSize);
strDest[nUTF8codeSize] = 0;
return nUTF8codeSize;
}
/* INSERT demo */
char queryUtf8[100];
std::string queryAnsi = "insert into db_test values('testval', '군포지사','N00225','영동선','0500','E',13.67,14.18);";
AnsiToUTF8(&queryAnsi[0u], queryUtf8, 100);
res = PQexec(conn, queryUtf8);
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
std::cout << "Insert into table failed: " << PQresultErrorMessage(res)
<< std::endl;
}
else
std::cout << "inserted" << std::endl;
PQclear(res);
正确的解决方案是将client_encoding
参数设置为正确的值(客户端使用的编码(。您可以在连接到数据库时执行此操作:
PGconn *conn;
conn = PQconnectdb("user=carl password=secret client_encoding=LATIN1");
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- HEX值到wchar_t字符(UTF-8)的转换
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- PostgreSQL C++ libpq 编码 UTF-8 问题
- C Unicode UTF-8解码字符的问题
- UTF-16LE 编码问题与 Qt 文本编辑器用 C++ 编写
- 在微控制器上编写 UART 控制台时出现 UTF-8 问题
- Qt 5编码问题(UTF-8、Windows-1250、Windows-1251)
- C++ncurses编码(UTF-8)问题
- C++处理UTF-8问题
- 用unicode文件名保存文件的问题-如何以跨平台的方式正确保存UTF-8文件名