2015-12-02 5 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

Можно преобразовать строку широкой обугленной в utf8 так:

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);