Всем привет! Не могу заставить работать перекодировки из UTF-8 в Windows1251. Не выдает результат как не бился... Что то не так делаю, может принцип сам не понимаю перекодировки. Кто подскажет более свежим опытным взглядом?
Код:
/*---------- UTF8 функция перекодировки ----------*/ int utf8_rus(char* dest, const unsigned char* src) {
unsigned int i, j;
for ( i =0, j=0; src[i]; i++) {
if (src[i] >= 0x90) { dest[++j] = src[i] + 0x30; //D0 c 144 по 191
} else {if (src[i] >= 0x80) {dest[++j] = src[i] + 0x70; //D1 с 128 по 143
Кирилица 2 байтовая к примеру буква русская "А" - 0xD0, 0х90, далее с русской "р" - 0хD1,0х80. На выходе представлленым вами, получается в массив не положил перекодированную строку?
На вопрос для чего для начала проверить его работу перед применение где либо. Далее для начала написал код для перекодирования, чтобы кириллица полностью отображалась... В том то и дело что, это соответствует win1251, но вывода почему то нет даже просто в терминале... возможно надо добавить 1 байт инфы, т.е. 0xD0 или 0xD1. Если взять строку "ABCDE", она полностью отображается в терминале
Код:
m 00800100 byte[6] символ m[0] 0x0100 0xC0 А m[1] 0x0101 0xC1 Б m[2] 0x0102 0xC2 В m[3] 0x0103 0xC3 Г m[4] 0x0104 0xC4 Д m[5] 0x0105 '\0' конец строки
Да удивительно, как некоторые, заморачиваются давно решенными вопросами.
_________________ "Every profession is a conspiracy against the uninitiated" (B. Shaw) "A textbook can be defined as a book unsuitable for reading" (B. Shaw) Tautology is humor in "this" place (Vigo Carpathian)
кодировох дохрена разных... вапрос с юником тоже решен
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Не надо ни чего добавлять и кодировать, не изобретайте "велосипед"
Спасибо за ликбез! Я же говорю дальше применять, есть в проекте библиотека шрифта font6x8.c, в которой прописаны все символы по 255("я"), ну и вывод же конечно предпринимается не в терминал а на экран тв по av входу. Аля TVout от ардуино. Вот для чего мне перекодировка. Точнее все уже сделано, и выводить по символьно русский символы я могу, float, и т. д. ... Хочется русский текст вот и изучаю эту тему. К примеру TV. print(0,12,"Я балбес!")
Dimon456, что за сарказм?думать за других впереди паровоза вы умеете, я уже прочуствовал не в одной теме)) Мысли то есть по поводу кода? Да и как бы написал что буду применять его потом, как еще опять не так выразился))
UTF международный стандарт. Как я уже говорил, пора бы уже переработать периферию микроконтроллеров. Например UART родился из ASCI, пора родить периферию под UTF. Обязательно с поддержкой OLE.
_________________ "Every profession is a conspiracy against the uninitiated" (B. Shaw) "A textbook can be defined as a book unsuitable for reading" (B. Shaw) Tautology is humor in "this" place (Vigo Carpathian)
конкретнее бы выражался и сарказма бы не было. А для TVout от ардуино есть соответствующая тема -> Arduino
А отладить код через терминал нельзя, когда перекодируется хотя бы один символ, потом проверил все символы, делалось так, это о терминале... Ну я же сказал аля tvout, пишу я то я в студии, я свой ребята, пустите!)))
Dimon456, чет я туго соображаю, не понял твой ответ. или непонял вопрос тс. я понял так что нужно получить массив смещений для фонта упакованного для 1251. тогда нужно отбросить префикс баайты вроде 0xD0 0xD1 и преобразовать изначащий байт под 1251. (это впоследствии позволит делать font[c] тоесть умножить на размер обьекта, добавить указатель начала и получить указатель на растр или что там за фонт.)
или непонял вопрос тс. я понял так что нужно получить массив смещений для фонта упакованного для 1251. тогда нужно отбросить префикс баайты вроде 0xD0 0xD1 и преобразовать изначащий байт под 1251. (это впоследствии позволит делать font[c] тоесть умножить на размер обьекта, добавить указатель начала и получить указатель на растр или что там за фонт.)
Выложу библиотеку шрифта! Уже говорил что вывод на экран успешен, если по символам выводить.
Вложения:
Комментарий к файлу: Особо ну пугайтесь, половина BIN записи, половина HEX font6x8.cpp [20.43 KiB]
Скачиваний: 168
AlexS4, ни что не надо преобразовывать, это neid мозги парит себе и людям, надо просто посмотреть как выводится строка в этом самом TVout от ардуино. Судя по font6x8.cpp буковки от А до я стоят на своих местах. Откуда он взял и для чего D0 D1 - загадка.
Мне лень эту среду устанавливать с ее библиотеками, если он полностью проект выложит - может тогда еще гляну. А так пусть пишет в соответствующий раздел форума.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 30
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения