Re: Программирование строк в UTF-8 локали
Viktor Vislobokov -> debian-russian@lists.debian.org @ Mon, 20 Dec 2004 10:44:13 +0500:
VV> Привет всем.
VV> Я тут угрузился проблемой русских строк в UTF-8 локали.
VV> Так уже писать нельзя
VV> tmp = strdup("Проба");
VV> tmp1 = strndup(tmp, 3);
VV> Потому что в tmp1 будет не "Про", а фиг него знает что.
VV> strlen("Проба");
VV> вернёт вовсе не 5.
VV> Да, есть в текушей libc такой чудный вещь как wchar.h
VV> и соответствующие рутины типа wcsdup и т.д. Но старые
VV> программы теперь в глубокой жо..?
Те, которые полагали, что символ - это байт? (А приведенный выше пример
- он именно такой.) Да, конечно, где еще они с таким подходом могут
быть? Они, конечно, были спровоцированы языком C, но это их извиняет, а
не спасает.
VV> А если я хочу скажем в curses добавить полученный
VV> мной через getch символ к строке, то как это сделать,
VV> учитывая, что getch возвращает int, а строка имеет
VV> типа w_chart *?
VV> Как вообще теперь добавлять СИМВОЛ к СТРОКЕ? Раньше
VV> было просто всегда работала конструкция вида:
VV> char tmp[2];
VV> char *str;
VV> tmp[1] = '\0';
VV> tmp[2] = 'А';
VV> strcat(str, tmp);
Так уж и всегда? И никогда не падала с segmentation fault из-за выхода
за границу массива во втором присваивании?
А вообще - info libc, "Converting a Character" и иже с ним до просветления.
--
Artem Chuprina
RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, Jabber: ran@jabber.ran.pp.ru
Reply to: