我怎么能一个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