Разработки          Услуги          О компании          Контакты  

юникодные и ASCII конвертеры для строк

Материал из биософт-м

Перейти к: навигация, поиск

  !   Данная информация предназначена только только для IT-специалистов по системной интеграции модулей БИОСОФТ-М. (см. Руководства пользователя к программным продуктам)

class unicode
{
public:
 
    // ASCII/RU --> UTF-8
    static sbuf GConvertWin1251ToUtf8(
            sbuf sbuf1251);
 
    // UTF-8 --> ASCII/RU
    static sbuf GConvertUtf8ToWin1251(
            sbuf sbufUtf8);
 
//VL: 2014-07-19 -U3
    // UTF-16 --> UTF-8
    static sbuf GConvertUtf16ToUtf8(
            sbuf sbufUtf16);
 
    // UTF-8 --> UTF-16 (*** Always adds 2 zero bytes for termination ***)
    static sbuf GConvertUtf8ToUtf16PlusZeroWord(
            sbuf sbufUtf8);
//VL.

Предупреждение: char = 8 bit = 1 byte

 !  Запрещено оперировать устаревшим 16 битным UNICODE (UCS-2, UTF-16) кроме конверсии из/в него когда это неизбежно в коммуникации с легаси внешним миром


UNICODE/widechar не имеет никаких преимуществ над UTF-8 кроме создания бесчисленных проблем с отклонением от нормального размера char и нулями в str. Его использование в ОС и всяких языках была ошибка, с которой нужно иметь коммуникацию но которую нельзя повторять в нашем коде.

Вся внутренняя обработка текста должна быть ориентирована на 8 битные ASCII или UTF-8. Как весь Web. Хотя конвертеры UTF-16 в/из sbuf реализованы, представить такой юникод в str корректно нельзя из за требования терминации двумя нулями. Нужно всегда добавлять дополнительные Char(0) во избежание очень не очевидных и не всегда сразу проявляющихся коррупций. Не возможно и не целесообразно сделать полноценно эквивалентные str методы обработки текста представленного в char!=8bit. То же касается и извращений типа UTF-32.


 !  99.9% парсеров работают в рамках ASCII символов и им безразлична кодировка всего что за пределами 128 первых символов


Английский язык главный и практически исключительный во всех управляющих ключевых словах. Кроме английских букв для парсеров осмыслены только знаки препинания того же ASCII диапазона. Поэтому практически 100% кода глубоко безразлично как вторичные языки закодированы в str - UTF-8, Win-1251, KOI8R или какие угодно крякозябы. Поэтому весь существующий С/С++ код спокойно работает с 8 битными char не зависимо от кодировок. Вплоть пока не понадобилось буквицы на экране рисовать или EditBox реализовывать. Но это системные задачи специализированных библиотек. Приложением же все равно в каком байте русская буква начинается и где заканчивается.

Приятная особенность UTF-8 что не смотря на переменную длину логического символа сортировка происходит правильно даже если сравнивающий строки код работает побитно/ASCII.

Но эту ситуацию сразу убивает UTF-16, писать парсеры в котором очень глупо, как вообще применять любые кодировки корежащие чисто английскую часть текста.


Эта категория в данный момент пуста.

www.biosoft-m.ru



Просмотры
Личные инструменты