Всем привет! Не могу заставить работать перекодировки из 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' конец строки
Не надо ни чего добавлять и кодировать, не изобретайте "велосипед"
Спасибо за ликбез! Я же говорю дальше применять, есть в проекте библиотека шрифта font6x8.c, в которой прописаны все символы по 255("я"), ну и вывод же конечно предпринимается не в терминал а на экран тв по av входу. Аля TVout от ардуино. Вот для чего мне перекодировка. Точнее все уже сделано, и выводить по символьно русский символы я могу, float, и т. д. ... Хочется русский текст вот и изучаю эту тему. К примеру TV. print(0,12,"Я балбес!")
Dimon456, что за сарказм?думать за других впереди паровоза вы умеете, я уже прочуствовал не в одной теме)) Мысли то есть по поводу кода? Да и как бы написал что буду применять его потом, как еще опять не так выразился))
UTF международный стандарт. Как я уже говорил, пора бы уже переработать периферию микроконтроллеров. Например UART родился из ASCI, пора родить периферию под UTF. Обязательно с поддержкой OLE.
конкретнее бы выражался и сарказма бы не было. А для TVout от ардуино есть соответствующая тема -> Arduino
А отладить код через терминал нельзя, когда перекодируется хотя бы один символ, потом проверил все символы, делалось так, это о терминале... Ну я же сказал аля tvout, пишу я то я в студии, я свой ребята, пустите!)))
Dimon456, чет я туго соображаю, не понял твой ответ. или непонял вопрос тс. я понял так что нужно получить массив смещений для фонта упакованного для 1251. тогда нужно отбросить префикс баайты вроде 0xD0 0xD1 и преобразовать изначащий байт под 1251. (это впоследствии позволит делать font[c] тоесть умножить на размер обьекта, добавить указатель начала и получить указатель на растр или что там за фонт.)
или непонял вопрос тс. я понял так что нужно получить массив смещений для фонта упакованного для 1251. тогда нужно отбросить префикс баайты вроде 0xD0 0xD1 и преобразовать изначащий байт под 1251. (это впоследствии позволит делать font[c] тоесть умножить на размер обьекта, добавить указатель начала и получить указатель на растр или что там за фонт.)
Выложу библиотеку шрифта! Уже говорил что вывод на экран успешен, если по символам выводить.
AlexS4, ни что не надо преобразовывать, это neid мозги парит себе и людям, надо просто посмотреть как выводится строка в этом самом TVout от ардуино. Судя по font6x8.cpp буковки от А до я стоят на своих местах. Откуда он взял и для чего D0 D1 - загадка.
Мне лень эту среду устанавливать с ее библиотеками, если он полностью проект выложит - может тогда еще гляну. А так пусть пишет в соответствующий раздел форума.