Re: Программирование с трок в UTF-8 локали

2004-12-20 Пенетрантность Victor B. Wagner
On 2004.12.20 at 11:05:13 +0500, Viktor Vislobokov wrote:

> 
> >И слава богу. Программам "которые работают с русским языком" там и
> >место. Правильная программа должна работать с любым языком,  с которым
> >захотел пользователь. 
> > 
> >
> Витус, а можно всё-таки с конкретикой? Что делать-то? С getch(), с
> добавлением символа?

Самое правильное - поменять язык программирования. В Perl, Tcl, Python,
Java эти проблемы давно уже за вас решены. 

Если пользоваться "портабельнып ассеблером" то внимательно читать
документацию по той версии ncurses, которая используется. Не все версии
поддерживают utf-8 как вообще.

Кроме этого следует обратить внимание на понятие  Multibyte string и
функции преобразования wchar  в multibyre и обратно, равно как и вообще
на mb* функции.

> Не то, чтобы я был не согласен с твоими словами, но когда я вижу, что
> не могу нормально писать...

Тогда следует читать.  



Re: Программирование с трок в UTF-8 локали

2004-12-19 Пенетрантность Victor B. Wagner
On 2004.12.20 at 10:44:13 +0500, Viktor Vislobokov wrote:

> Привет всем.
> 
> Я тут угрузился проблемой русских строк в UTF-8 локали.
> Так уже писать нельзя
> 
> tmp = strdup("Проба");
> tmp1 = strndup(tmp, 3);
> 
> Потому что в tmp1 будет не "Про", а фиг него знает что.
> 
> strlen("Проба");
> 
> вернёт вовсе не 5.
> 
> Да, есть в текушей libc такой чудный вещь как wchar.h
> и соответствующие рутины типа wcsdup и т.д. Но старые
> программы теперь в глубокой жо..?

И слава богу. Программам "которые работают с русским языком" там и
место. Правильная программа должна работать с любым языком,  с которым
захотел пользователь. 
 
 



Программирование с трок в UTF-8 локали

2004-12-19 Пенетрантность Viktor Vislobokov

Привет всем.

Я тут угрузился проблемой русских строк в UTF-8 локали.
Так уже писать нельзя

tmp = strdup("Проба");
tmp1 = strndup(tmp, 3);

Потому что в tmp1 будет не "Про", а фиг него знает что.

strlen("Проба");

вернёт вовсе не 5.

Да, есть в текушей libc такой чудный вещь как wchar.h
и соответствующие рутины типа wcsdup и т.д. Но старые
программы теперь в глубокой жо..?

А если я хочу скажем в curses добавить полученный
мной через getch символ к строке, то как это сделать,
учитывая, что getch возвращает int, а строка имеет
типа w_chart *?

Как вообще теперь добавлять СИМВОЛ к СТРОКЕ? Раньше
было просто всегда работала конструкция вида:

char tmp[2];
char *str;

tmp[1] = '\0';
tmp[2] = 'А';

strcat(str, tmp);

Что делать сейчас?

--
С уважением, Виктор