Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Несоответствие кодировок...[РЕШЕНО]  (Прочитано 764 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн shude

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Несоответствие кодировок...[РЕШЕНО]
« : 19 Февраля 2010, 19:16:23 »
Пишу на Си++ под Ubuntu небольшое приложение. На Windows машине поставил cygwin  и пишу. Везде все компилируется и работает прекрасно как на сервере так и на локальной машине.  Проблема с символами кирилицы.

в коде простая проверка:

// Тут я получаю HTML страницу с сервера в кодировке UTF-8 она хранится в char* inbuf
//......
//......
//А вот тут проблема
if(strstr(inbuf,"Привет Мир")) {...};    //Эта строка никак не отрабатывает.

Я пробовал сохранить исходный код в кодировку UTF-8 , не помогло.

Следовательно мне нужно перед тем как вызвать функцию strstr сделать одно из двух:

1. Перекодировать строку "Привет Мир" в UTF-8 и поместить ее в char[]  (предпочтительнее)
2. Перекодировать весь inbuf в cp1251 .

Кто подскажет как сделать один из этих двух шагов. Или может другой способ.
« Последнее редактирование: 20 Февраля 2010, 05:19:55 от shude »

Оффлайн Lexcuk

  • Любитель
  • *
  • Сообщений: 59
    • Просмотр профиля
Re: Несоответствие кодировок...
« Ответ #1 : 19 Февраля 2010, 22:57:27 »
Самый тупой способ перекодировки пишешь тупо символы в виндоус1251
абвгдежзийклмнопр...
Теперь то-же самое в utf-8 (gedit) hexредактором переписываешь коды буков в char массив ищешь соответствия и создаешь новый перекодированный массив char.
ЗЫ: в утф-8 на одну русскую букву приходится два char символа

Оффлайн shude

  • Автор темы
  • Новичок
  • *
  • Сообщений: 11
    • Просмотр профиля
Re: Несоответствие кодировок...
« Ответ #2 : 20 Февраля 2010, 05:18:37 »
Разобрался методом "тыка". написал функцию. Если кому нужно будет то вот.

void ucode(char* buf, char* dest)
{
int i,k = 0;
for(i = 0;;i++,k += 2)
{
if(buf[i] == 0){dest[k] = 0; return;};
if(buf[i] <= -1 && buf[i] >= -16){dest[k] = -47; dest[k+1] = buf[i] - 112; continue;};
if(buf[i] <= -17 && buf[i] >= -32){dest[k] = -48; dest[k+1] = buf[i] - 48; continue;};
if(buf[i] <= -33 && buf[i] >= -64){dest[k] = -48; dest[k+1] = buf[i] - 48;  continue;};
if(buf[i] == -72){dest[k] = -47; dest[k+1] = -111;  continue;};
if(buf[i] == -88){dest[k] = -48; dest[k+1] = -127;  continue;};
dest[k] = buf[i]; k--;
};
};

char* buf - строка в кодировке win1251
cher* dest - буффер для новой строки.

Гланвое следите за тем чтобы размер dest был как минимум в 2 раза + 1 больше чем buf.

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Несоответствие кодировок...[РЕШЕНО]
« Ответ #3 : 20 Февраля 2010, 09:12:07 »
откройте для себя wchar_t, широкие символы, iconv,
locale и прочее =) жизнь станет проще!

P.S. ИМХО, то что написано выше не есть решение. это костыль каких поискать надо

 

Страница сгенерирована за 0.032 секунд. Запросов: 25.