如何将wchar_t(或wchar_t *或CORBA :: WChar *)转换为字符串?

时间:2012-09-16 21:34:40

标签: c++ type-conversion wchar-t wchar soci

在我的应用程序中,我必须使用CORBA :: WChar *(或等效的wchar_t *),但我的程序还需要将一些信息保存到PostgreSQL数据库中。要在C ++中将数据插入PostgreSQL,我使用的是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上运行它。

2 个答案:

答案 0 :(得分:1)

我建议您boost::locale::conv::utf_to_utf<char>(wchar_t*)只需将wchar_t*字符串转换为UTF-8以获取更多信息,请阅读boost::locale文档

答案 1 :(得分:-1)

哪种数据库不允许存储Unicode字符串?我的建议是使用一个像样的数据库。