2015-12-02 136 views
0

是否有可能插入數據庫表(基於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個字節的符號。

回答

1

這是可能的寬字符字符串轉換爲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);