[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: