簡體   English   中英

將unicode轉換為char

[英]convert unicode to char

如何在Embarcadero C ++ 中將 Unicode字符串轉換為char*char* const

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

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

“ Unicode字符串”確實還不夠具體,無法知道您的源數據是什么,但是您可能的意思是“ UTF-16字符串存儲為wchar_t數組”,因為這是大多數不了解正確術語的人所使用的。

盡管“ embarcadero”有一些約定,但“ char *”也不足以知道您要定位的目標。 除非另有說明,否則我將假設您需要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字符串與Windows一樣是UTF-16,否則是可移植代碼。

您可以合法地將任何數組重新解釋為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之類的庫。)

如果您使用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中不可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM