Как преобразовать wchar_t (или wchar_t * или CORBA :: WChar *) в строку?

В моем приложении я должен использовать CORBA :: WChar * (или эквивалентный wchar_t *), но моя программа также должна сохранять некоторую информацию в базу данных PostgreSQL. Чтобы вставить данные в PostgreSQL в C ++, я использую SOCI. И есть проблема, потому что:

The following types are currently supported for use with into and use expressions:
char (for character values)
short, int, unsigned long, long long, double (for numeric values)
char*, char[], std::string (for string values)
std::tm (for datetime values)
soci::statement (for nested statements and PL/SQL cursors)
soci::blob (for Binary Large OBjects)
soci::row_id (for row identifiers)

так что wchar_t * или wstring не поддерживаются … и мне нужно преобразовать CORBA :: WChar (или wchar_t или wchar_t *) в строку. Как это сделать?

У меня также есть проблема с широкими символами (и строками), используя CodeBlocks 10.5:

#include <cstdlib>
#include <iostream>
using namespace std;

int main(int argc, char **argv)
{
const wchar_t *val = L"ąśżźćłóń";
wcout << val << "\n";
return 0;
}

показывает:

E:\Temp\Untitled1.cpp||In function 'int main(int, char**)':|
E:\Temp\Untitled1.cpp|7|error: converting to execution character set: Invalid argument|
||=== Build finished: 1 errors, 0 warnings ===|

как это исправить?

Мне также нужно, чтобы код был переносимым, чтобы я мог запускать его как в Unix / Linux, так и в Windows.

0

Решение

Я бы предложил boost::locale::conv::utf_to_utf<char>(wchar_t*) которые просто конвертируют вас wchar_t* строка в UTF-8 для получения дополнительной информации, пожалуйста, прочитайте boost::locale документация

1

Другие решения

Какая база данных не позволяет хранить строки Unicode? Мое предложение будет использовать приличную базу данных.

-1

По вопросам рекламы [email protected]