Вопрос по unicode, locale, char, c++, c++builder – конвертировать юникод в символ
Как я могу преобразовать строку Unicode вchar*
или жеchar* const
впричал с ++?
на символы. Так что, если ваши данные 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 один за другим.
(Это, конечно, не имеет ничего общего сconverting the encoding вашего текста. Для этого используйте библиотеку вродеiconv
или ICU.)
& quot; Unicode string & quot; на самом деле не достаточно конкретен, чтобы знать, каковы ваши исходные данные, но вы, вероятно, имеете в виду «строку UTF-16, сохраненную как массив wchar_t»; так как это то, что большинство людей, которые не знают правильной терминологии, используют.
& Quot; символ * & Quot; также недостаточно того, чтобы знать, на что вы хотите нацелиться, хотя, возможно, и «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, но в остальном это переносимый код.
String text = "Hello world";
char *txt = AnsiString(text).c_str();
Older text.t_str() is now AnsiString(String).c_str()