ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
12 июля
451760 Топик полностью
fk0, легенда (08.10.2013 09:24, просмотров: 161) ответил Ale3000 на Макрос L"текст" - для двухбайтвых символов. Я же хотел однобайтовые символы в кодировке 1251.
Двухбайтные символы специально для того и разработаны... На самом деле они могут быть и двухбайтные и однобайтные. Но строго фиксированное число байт. В отличии от UTF-8. Не нужно извращений, программа должна сама минимальные представления иметь о кодировках и проще сразу работать с юникодом, чем зачем-то специально дисплей в CP1251, когда CP1251 ни на входе, ни на выходе, ни где больше ещё не встретится. Я уже описывал тут, что если компилятор не имеет поддержки wchar.h, то можно добавить что-то вроде typedef char wchar_t, #define wstrcmp strcmp и т.п... И написать всего пару-тройку функций типа mbstowcs, wcstombs, mbslen. После чего программирование сильно облегчается, за одним исключнием: L"текст" не работает и "%ls". Можно сделать заменитель для L"", но только для латинского алфавита. Константы все в UTF-8, вводы-вывод тоже, в wchar_t представление в ISO-8859-5 (gost=unicode-0x360 -- вот и всё перекодирование), чего достаточно для русского, украинского и беларусского языков. Соответственно, для дисплея проще перейти на гостовскую кодировку и предусмотреть в интерфейсе функции получения строк в utf-8 и перекодирования на лету. На вводе-выводе UTF-8, для посимвольной обработки -- гост. Можно, конечно, такое сделать и для CP1251, и для CP866... но это добавляет таблицы преобразования туда-обратно и ничего кроме виндоморонской привязанности к cp1251 здесь нет, не нужно оно.
[ZX]