Unicode转换为char(convert unicode to char)

2019-06-25 12:31发布

我怎么能一个Unicode字符串转换成char*char* const中英巴卡迪诺 C ++?

Answer 1:

“Unicode字符串”还真是不够具体知道你的源数据是什么,但你大概的意思,因为这是大多数人谁不知道正确的术语使用“存储为wchar_t的数组UTF-16字符串”。

“字符*”也是不够的,知道你要什么样的目标,但也许“Embarcadero公司”有一些约定。 我只是想,你希望UTF-8的数据,除非你提到的除外。

此外,我会限制我的例子,什么工作VS2010

// your "Unicode" string
wchar_t const * utf16_string = L"Hello, World!";

// #include <codecvt>
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>,wchar_t> convert;

std::string utf8_string = convert.to_bytes(utf16_string);

这是假定wchar_t的字符串是UTF-16,因为是在Windows的情况下,但在其他方面是可移植的代码。



Answer 2:

String text = "Hello world";
char *txt = AnsiString(text).c_str();

Older text.t_str() is now AnsiString(String).c_str()


Answer 3:

您可以重新解释任何数组作为字符指针合法的数组。 所以,如果您的Unicode数据进来4个字节的代码单元像

char32_t data[100];

那么你就可以访问它作为一个字符数组:

char const * p = reinterpret_cast<char const*>(data);

for (std::size_t i = 0; i != sizeof data; ++i)
{
    std::printf("Byte %03zu is 0x%02X.\n", i, p[i]);
}

这样的话,你可以用一个检查你的Unicode数据之一的单个字节。

(已经当然无关转换文本的编码 。对于这一点,使用像图书馆iconv或ICU)。



Answer 4:

如果您的工作与Windows:

//#include <windows.h>
u16string utext = u"объява";
char text[0x100];
WideCharToMultiByte(CP_UTF8,NULL,(const wchar_t*)(utext.c_str()),-1,text,-1,NULL,NULL);
cout << text;

我们不能使用std :: wstring_convert,因此不提供MinGW的4.9.2。



文章来源: convert unicode to char