В моем приложении я должен использовать 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.
Я бы предложил boost::locale::conv::utf_to_utf<char>(wchar_t*)
которые просто конвертируют вас wchar_t*
строка в UTF-8 для получения дополнительной информации, пожалуйста, прочитайте boost::locale
документация
Какая база данных не позволяет хранить строки Unicode? Мое предложение будет использовать приличную базу данных.