Почему 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, как вы, наверное, уже знаете.