Форум программистов, компьютерный форум CyberForum.ru

Перекодировка файла в C++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.88
glob()
0 / 0 / 0
Регистрация: 02.09.2009
Сообщений: 12
02.09.2009, 11:21     Перекодировка файла в C++ #1
Работаю с С++ в юниксе. Компилятор - консольный gcc.
Надо прочесть файлы в кодировках windows-1251, koi8-r или utf-8 и переделать в utf-8 или windows-1251, что бы вся дальнейшая работа была в одной кодировке.
Подскажите, пожалуйста, какие функции есть в c++ для этого дела и где по ним почитать можно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.09.2009, 11:21     Перекодировка файла в C++
Посмотрите здесь:

Перекодировка с Паскаля на C++ C++
C++ Перекодировка char в char*
C++ Перебор файла посимвольно, как организовать цикл, работающий до конца файла.
Перекодировка исходного файла под ДОС C++
C++ libxslt libxml2 - Перекодировка
C++ Сформировать два текстовых файла из целых чисел. Записать в третий файл минимальный элемент первого файла и максимальный элемент второго файла
Преобразование текстового файла в двоичный и чтение исходных данных из двоичного файла. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Vourhey
Почетный модератор
6470 / 2245 / 123
Регистрация: 29.07.2006
Сообщений: 12,635
02.09.2009, 11:43     Перекодировка файла в C++ #2
Можно даже облегчить себе работу и использовать стандартную команду iconv. Можешь прочитать о ней man iconv
Или:
http://www.opennet.ru/base/dev/iconv_c.txt.html
glob()
0 / 0 / 0
Регистрация: 02.09.2009
Сообщений: 12
02.09.2009, 12:09  [ТС]     Перекодировка файла в C++ #3
Цитата Сообщение от Vourhey Посмотреть сообщение
iconv
Спасибо большое!
Gravity
 Аватар для Gravity
556 / 550 / 39
Регистрация: 29.01.2009
Сообщений: 1,274
02.09.2009, 12:19     Перекодировка файла в C++ #4
http://www.cyberforum.ru/cpp-linux/thread43639.html
glob()
0 / 0 / 0
Регистрация: 02.09.2009
Сообщений: 12
23.09.2009, 10:04  [ТС]     Перекодировка файла в C++ #5
А вот еще вопрос по iconv.
В man iconv написано, что если добавить к выходной кодировке //IGNORE, то будут опускаться всякие нечитабельные символы и выдача не будет на них прерываться. На практике так у меня не получилось.
Подскажите, пожалуйста, что не так написал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
string iconv_as_php(string code_from, string code_to, string code)
{
    iconv_t cd;
    size_t k, f, t;
    int se;
    char* in = (char*)code.c_str();
    char buf[1000];
    char* out = buf;
 
    cd = iconv_open(code_to.c_str(), code_from.c_str());
    if( cd == (iconv_t)(-1) )
    err( 1, "iconv_open" );
    f = strlen(code.c_str());
    t = sizeof buf;
    memset( &buf, 0, sizeof buf );
    errno = 0;
    k = iconv(cd, &in, &f, &out, &t);
    se = errno;
 
    iconv_close(cd);
 
    return buf;
}
 
enc = "windows-1251";
ret = iconv_as_php(enc, "UTF-8//IGNORE", ret);
Что с //IGNORE, что без него, выдача обрывается на первом нечитаемом символе.
glob()
0 / 0 / 0
Регистрация: 02.09.2009
Сообщений: 12
28.09.2009, 11:27  [ТС]     Перекодировка файла в C++ #6
Всё. Уже не надо.
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
28.09.2009, 11:45     Перекодировка файла в C++ #7
Ты напиши - в чем была ошибка !
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2009, 12:03     Перекодировка файла в C++
Еще ссылки по теме:

C++ Перекодировка из EBCDIC в win1251
C++ Перекодировка текста для вывода в окне
C++ Перекодировка текстовых файлов
Получение атрибутов файла (а именно дату создания файла) без WinApi C++
C++ Как, прочитав из файла один символ, выявить факт окончания файла

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
glob()
0 / 0 / 0
Регистрация: 02.09.2009
Сообщений: 12
28.09.2009, 12:03  [ТС]     Перекодировка файла в C++ #8
Цитата Сообщение от odip Посмотреть сообщение
Ты напиши - в чем была ошибка !
Аа. Да всё просто оказалось.
C++
1
char buf[1000];
Памяти мало выделял. Текст не помещался и обрезался.

Вот так наиболее универсально:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
string iconv_as_php(string code_from, string code_to, string code)
{
    iconv_t cd;
    size_t k, f, t;
    int se;
    int need_size = code.length();
    char* in = (char*)code.c_str();
    char buf[need_size*2];
    char* out = buf;
 
    cd = iconv_open(code_to.c_str(), code_from.c_str());
    if (cd == (iconv_t)(-1)) err(1, "iconv_open");
    f = strlen(code.c_str());
    t = sizeof buf;
    errno = 0;
    k = iconv(cd, &in, &f, &out, &t);
    se = errno;
 
    iconv_close(cd);
 
    return buf;
}
Yandex
Объявления
28.09.2009, 12:03     Перекодировка файла в C++
Ответ Создать тему
Опции темы

Текущее время: 01:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru