Почему 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

1 ответ

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

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

Другие вопросы по тегам