Здравствуйте, Roman Odaisky, Вы писали:
RO>Здравствуйте, Vostok, Вы писали:
V>>Ну и, естественно, когда я пытаюсь определить длину слов, которые хранятся в виде string, то для русских слов размер, конечно, определяется некорректно. Вот и я решил исправить всё кардинально: читать всё в utf8 в wstring и получать правильные длины слов.
RO>Не получишь ты правильные длины слов подсчетом количества Unicode code points.
RO>Café (U+0043 U+0061 U+0066 U+00E9) — сколько букв? (Правильный ответ: 4.)
RO>Café (U+0043 U+0061 U+0066 U+0065 U+0301) — сколько букв? (Правильный ответ: 4.)
RO>Shuffle (U+0053 U+0068 U+0075 U+0066 U+0066 U+006C U+0065) — сколько букв? (Правильный ответ: 7.)
RO>Shuffle (U+0053 U+0068 U+0075 U+FB04 U+0065) — сколько букв? (Правильный ответ: 7.)
RO>Encyclopædia (U+0045 U+006E U+0063 U+0079 U+0063 U+006C U+006F U+0070 U+00E6 U+0064 U+0069 U+0061) — сколько букв? (Правильный ответ: 13.)
RO>Ударе́ние (U+0423 U+0434 U+0430 U+0440 U+0435 U+0301 U+043D U+0438 U+0435) — сколько букв? (Правильный ответ: 8.)
RO>(В шрифте Verdana диакритические знаки сползают)
Хм, а я сделал следующим образом: после курения доков посетила прекрасное знание, что wstring хранит всё в UCS-2. Взял конвертацию UTF-8 -> UCS-2 и длина слов wstring стала считаться верно.. Чего я и добивался.
Но проблему с wcout пока не осилил. Как я понимаю, надо перед выводом всё обратно в utf-8 гнать, либо wcout выставлять ucs-2. Но что-то с наскока не получилось.