如何将 Unicode 字符串转换为 a char*
or char* const
in embarcadero c++ ?
问问题
27292 次
4 回答
4
String text = "Hello world";
char *txt = AnsiString(text).c_str();
Older text.t_str() is now AnsiString(String).c_str()
于 2012-10-19T05:54:36.450 回答
2
“Unicode 字符串”确实不够具体,无法知道您的源数据是什么,但您的意思可能是“UTF-16 字符串存储为 wchar_t 数组”,因为大多数不知道正确术语的人都使用这种方式。
"char*" 也不足以知道你想要定位什么,尽管 "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 上的情况一样,否则是可移植代码。
于 2012-06-14T20:36:47.613 回答
1
您可以合法地将任何数组重新解释为 char 指针数组。因此,如果您的 Unicode 数据采用 4 字节代码单元,例如
char32_t data[100];
然后您可以将其作为 char 数组访问:
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 之类的库。)
于 2012-06-14T20:17:53.583 回答
0
如果您使用 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 中不可用。
于 2015-11-02T20:54:55.770 回答