簡體   English   中英

C ++中的數組中的多字節UTF-8

[英]Multi-Byte UTF-8 in Arrays in C++

我在使用數組中的3字節Unicode UTF-8字符時遇到了問題。 當它們在char數組中時,我得到多字符字符常量和隱式常量轉換警告,但是當我使用wchar_t數組時,wcout根本不返回任何內容。 由於項目的性質,它必須是數組而不是字符串。 以下是我一直在努力做的一個例子。

#include <iostream>
#include <string>
using namespace std;
int main()
{
    wchar_t testing[40];
    testing[0] = L'\u0B95';
    testing[1] = L'\u0BA3';
    testing[2] = L'\u0B82';
    testing[3] = L'\0';
    wcout << testing[0] << endl;
    return 0;
}

有什么建議? 我正在使用OSX。

由於'\க'需要3個字節,因此它被視為多字符文字 多字符文字具有int類型和實現定義的值。 (實際上, 我不認為gcc是正確的

L前綴放在文字之前使其具有類型wchar_t並具有實現定義值(它映射到執行寬字符集中的值,該值是基本執行寬字符集的實現定義超 )。

C ++ 11標准為我們提供了一些更多的Unicode感知類型和文字。 其他類型是char16_tchar32_t ,其值是表示字符的Unicode代碼點。 它們分別類似於UTF-16和UTF-32。

由於您需要字符文字來存儲基本多語言平面中的字符,因此您需要一個char16_t文字。 這可以寫成,例如, u'\க' 因此,您可以按如下方式編寫代碼,不會出現警告或錯誤:

char16_t testing[40];
testing[0] = u'\u0B95';
testing[1] = u'\u0BA3';
testing[2] = u'\u0B82';
testing[3] = u'\0';

不幸的是,I / O庫不能很好地適應這些新類型。

如果你真的不需要使用上面的字符文字,你可以使用新的UTF-8字符串文字:

const char* testing = u8"\u0B95\u0BA3\u0B82";

這會將字符編碼為UTF-8。

暫無
暫無

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

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