Ранее я думал, что C ++ std :: string может поддерживать только наборы символов ASCII. Для других наборов символов, например, французских, японских символов, потребуется кодировка, например, UTF-8 / UTF-16.
Я просто попробую приведенный ниже код, и кажется, что C ++ std :: string уже поддерживает японские символы и французский. Угадай также поддержку всех других языков.
Как это может случиться? Значит ли это, что нам просто нужен std :: string для обработки всех человеческих языков?
string s;
s = "今年1年の世相を4字で振り返る恒例の「創作四字熟語」の優秀・入選50作品を発表した";
string t;
t = "Vélo, sac, appareil photo: bleu en un «Klein» d'œil pour Noël";
cout<<s<<'\n';
cout<<t<<'\n';
Выход:
今年 1 年 の 世 相 を 4 字 で 振 り 返 る 恒 例 の 「創作 四字 熟語」 の 優秀 · 入選 50 作品 を 発 表 し た
Vélo, Sac, Appareil Фото: Bleu en un «Klein» d’œil pour Noël
std::string
может поддерживать произвольный поток байтов, включая UTF-8, который вы видите здесь. Со стороны ввода ваш компилятор, очевидно, поддерживает его, а со стороны вывода — ваша терминальная программа.
Где все может сломаться, если вы предполагаете в своем коде, что один char
в вашем std:: string
соответствует одному символу на экране. Это не относится к UTF-8, как вы, наверное, уже знаете.
Других решений пока нет …