2014-01-15 76 views
1

我想知道是否有任何方法可以將unicode代碼轉換爲C++中的字符串或char 11. 我一直在嘗試使用擴展拉丁unicode字母Á(作爲示例)哪個有這樣編纂:Unicode到char * C++ 11

信:一個
的Unicode:0x00C1
UTF8文字:\ XC3 \ X81

我已經能夠這樣做,如果它是硬編碼爲:

const char* c = u8"\u00C1"; 

但是,如果我將字節序列作爲一個短,我怎麼能等同於獲得char *或std :: string'?'?

編輯,SOLUTION:

我終於能夠這樣做,這裏是解決辦法,如果有人需要它:

std::wstring ws; 
for(short input : inputList) 
{ 
    wchar_t wc(input); 
    ws += wc; 
} 
std::wstring_convert<std::codecvt_utf8<wchar_t>> cv; 
str = cv.to_bytes(ws); 

感謝您的意見,他們是非常有益的。

+0

使用['std :: wstring_convert'](http://en.cppreference.com/w/cpp/locale/wstring_convert) – Mgetz

+0

我已經使用wchar_t加載unicode字節,並使用wstring來連接它們,但我仍然有從它檢索正常的char *或std :: string的問題,有什麼想法? – Carles

+0

如果你使用['std :: wstring_convert :: to_bytes'](http://en.cppreference.com/w/cpp/locale/wstring_convert/to_bytes)這很簡單 – Mgetz

回答

1

問題是char只有一個字節長度,而unicode字符需要兩個字節的大小。

你仍然可以把它當作char *,但是你必須記住你沒有處理一個ascii字符串(將會有零)。

您可能不得不切換到wchar_t

3

C++ 11標準包含codecvt_utf8,它可以在某些內部字符類型(如果編譯器有,否則wchar_t)和UTF-8編碼之間進行轉換(嘗試char16_t)。

+0

我知道用wchar_t我可以檢索它,但我仍然需要轉換爲char *或std :: string。無論如何感謝您的回覆 – Carles