utf 8 — Почему C ++ std :: string может поддерживать символы на японском и французском языках?

Ранее я думал, что 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

2

Решение

std::string может поддерживать произвольный поток байтов, включая UTF-8, который вы видите здесь. Со стороны ввода ваш компилятор, очевидно, поддерживает его, а со стороны вывода — ваша терминальная программа.

Где все может сломаться, если вы предполагаете в своем коде, что один char в вашем std:: string соответствует одному символу на экране. Это не относится к UTF-8, как вы, наверное, уже знаете.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]