Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 02.12.2013, 00:12   #1
Realism_32
Пользователь
 
Регистрация: 01.12.2013
Сообщений: 17
По умолчанию Пустить код в обратную сторону

Есть код, который текст из файла в кодировке ср1251 переписывает в файл с кодировкой utf-8. Никак не выходит сделать обратное, то есть переписать данный код так, чтобы выполнялось utf-8 -> cp1251

Пожалуйста, помогите с решением.

Код:
#include <stdio.h>
#include <string.h>

int convert(int a)
{
  if (a > 127)
  {
    a+=848;
    return a;
  }
  return a;
}

int main(int argc, char* argv[])
{
  FILE *cp, *ut;  
  int a;
  
  if ((argc < 5) || (argc > 5) || (strncmp(argv[2], "cp1251", 6)) ||            strncmp(argv[4], "utf-8", 5) || (strlen(argv[2]) != 6) || (strlen(argv[4]) != 5))
    {      
      printf("Неправильный ввод данных\n");
      printf("Пример ввода данных ./convert  file.txt  cp1251  file.txt  utf-8\n");
      return -1;
    }
    else
    {
      cp = fopen(argv[1],"r");
      ut = fopen(argv[3],"w");
      if (cp == NULL)
      {
        printf("Неправильный ввод данных\n");
        printf("Пример ввода данных ./convert  file.txt  cp1251  file.txt  utf-8\n");
        return -1;
      }
      while ((a = fgetc(cp))!=EOF)
        {    
          a = convert(a);
          fwrite(&a, sizeof(short), 1, ut);     
        }
  
     fclose(cp);
     fclose(ut);
     return 0;
  }
}
пояснения:

Символы в кодировках после 127 совпадают на разницу 848, которую как раз прибавляем к символу а
Realism_32 вне форума
Старый 02.12.2013, 00:17   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Може стоит стандартными?: http://www.programmersforum.ru/showthread.php?t=111284
I'm learning to live...
Stilet вне форума
Старый 02.12.2013, 00:28   #3
Realism_32
Пользователь
 
Регистрация: 01.12.2013
Сообщений: 17
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Може стоит стандартными?: http://www.programmersforum.ru/showthread.php?t=111284

к сожалению, запретили пользоваться iconv
MultiByteToWideChar в Линуксе вроде как нельзя?
Realism_32 вне форума
Старый 02.12.2013, 00:46   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А-а-а... Линукс...
I'm learning to live...
Stilet вне форума
Старый 02.12.2013, 09:04   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Делаем UTF8 -> Unicode, потом Unicode -> cp1251

Начинаем вот отсюда: http://ru.wikipedia.org/wiki/UTF-8
waleri вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как пустить макрос через несколько прокси KuroiRyuu Microsoft Office Excel 1 01.09.2012 16:31
как заставить окружность двигаться в обратную сторону? phasha Помощь студентам 8 17.10.2011 18:54
Обработка файла, какой цикл лучше пустить в программе?! Lays Microsoft Office Excel 1 16.11.2010 17:46
Foreach в обратную сторону. KobolD Общие вопросы .NET 5 13.11.2010 10:24
Как из Delphi пустить на печать определенные страницы документа MS Word? Akemi Общие вопросы Delphi 3 01.06.2010 10:48