libpqxx postgresql utf8字符串

问题描述:

是否有可能插入数据库表(基于postgresql)utf8(unicode)字符串?libpqxx postgresql utf8字符串

pqxx::work tr(*_conn.get(), "notify"); 
std::stringstream ss; 
ss << "INSERT INTO tbl (msg) VALUES ('" << msg << "');"; 
tr.exec(ss.str()); 
tr.commit(); 

我想要的邮件内容将为例如キエオイウカクケコサシスセソタチツテア。但exec方法等待char字符串,而不是wchar。如何编码utf8字符串以将其传递到查询中? 附加问题:我如何编码utf8字符串使用wchar_t类型?我假设wchar类型代表2个字节的符号,但utf8可能包含最多6个字节的符号。

这是可能的宽字符字符串转换为UTF-8这样的:

std::wstring_convert<std::codecvt_utf8<wchar_t>> conv; 
std::string u8str = conv.to_bytes(msg); 

或者这样说:

std::wstring wmsg_text = L"キエオイウカクケコサシスセソタチツテア"; 
char buffer[100] = { 0 }; 
WideCharToMultiByte(CP_UTF8, 0, wmsg_text.data(), wmsg_text.size(), buffer, sizeof(buffer)-1, NULL, NULL); 

当然,从数据库中获取后的字符串是一定要执行:

std::wstring_convert<std::codecvt_utf8<wchar_t>> conv; 
std::wstring u8str = conv.from_bytes(message);