Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как на си сохранит файл в кодировке utf-8 
:(
    Опции темы
bigturtle
Дата 19.8.2009, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 27.1.2009

Репутация: нет
Всего: нет



Собственно нужно сохранить в кодировке Utf-8 текстовый файл.
PM MAIL   Вверх
Alexeis
Дата 19.8.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



  Windows? Linux? QT? Нативного преобразования можно сказать что нет. Т.е. нужно использовать либо сторонние либы или же средства ОС.
WideCharToMultiByte windows.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
nerezus
Дата 20.8.2009, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



bigturtle, fopen/fwrite/fclose.


Alexeis, а это при чем? о_О


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
Alexeis
Дата 20.8.2009, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(nerezus @  20.8.2009,  07:36 Найти цитируемый пост)
Alexeis, а это при чем? о_О 

  Ну у если у него строки были бы в utf8, то разве ж он спрашивал бы про кодировку, вот я и предлагаю конвертировать utf16->uft8, а потом записать в файл. Хотя если у него строки в ANSI, то схема будет ANSI->utf16->uft8.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
bigturtle
Дата 23.8.2009, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 27.1.2009

Репутация: нет
Всего: нет



Может это покажется странным но мне нужно просто сохранить файл в UTF-8. Как в блокноте есть возможность как сохранить файл..
PM MAIL   Вверх
mes
Дата 23.8.2009, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(bigturtle @  23.8.2009,  19:04 Найти цитируемый пост)
Может это покажется странным но мне нужно просто сохранить файл в UTF-8. Как в блокноте есть возможность как сохранить файл.. 

может показаться странным, но чтоб сохранить строки одной кодировки в файле под другой кодировкой, нужно вначале эти строки перекодировать (можно не сразу все, а частями), а уж потом  сохранять.
smile

Это сообщение отредактировал(а) mes - 23.8.2009, 20:10


--------------------
PM MAIL WWW   Вверх
nerezus
Дата 23.8.2009, 20:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



bigturtle, в "сохранить как" выбери.


mes, чо?


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
andrew_121
Дата 23.8.2009, 20:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


Профиль
Группа: Завсегдатай
Сообщений: 3448
Регистрация: 3.1.2008

Репутация: 6
Всего: 33



Вот. Есть еще для UTF-16, UTF-32
Код не мой.
Код

/*
    Copyright (C) 2004-2005 Cory Nelson

    This software is provided 'as-is', without any express or implied
    warranty.  In no event will the authors be held liable for any damages
    arising from the use of this software.

    Permission is granted to anyone to use this software for any purpose,
    including commercial applications, and to alter it and redistribute it
    freely, subject to the following restrictions:

    1. The origin of this software must not be misrepresented; you must not
        claim that you wrote the original software. If you use this software
        in a product, an acknowledgment in the product documentation would be
        appreciated but is not required.
    2. Altered source versions must be plainly marked as such, and must not be
        misrepresented as being the original software.
    3. This notice may not be removed or altered from any source distribution.
*/

// namespaces added by Arvid Norberg

#ifndef __UTF8_H__
#define __UTF8_H__

#include <string>
#include <iterator>
#include <stdexcept>
#include <cwchar>

template<typename InputIterator>
wchar_t decode_utf8_mb(InputIterator &iter, InputIterator last)
{
    if (iter == last) throw std::runtime_error("incomplete UTF-8 sequence");
    if (((*iter) & 0xc0) != 0x80) throw std::runtime_error("invalid UTF-8 sequence");

    return (wchar_t)((*iter++) & 0x3f);
}

template<typename InputIterator>
wchar_t decode_utf8(InputIterator &iter, InputIterator last)
{
    wchar_t ret;

    if (((*iter) & 0x80) == 0) // one byte
    {
        ret = *iter++;
    }
    else if (((*iter) & 0xe0) == 0xc0) // two bytes
    {
        wchar_t byte1 = (*iter++) & 0x1f;
        wchar_t byte2 = decode_utf8_mb(iter, last);
        ret = (byte1 << 6) | byte2;
    }
    else if (((*iter) & 0xf0) == 0xe0) // three bytes
    {
        wchar_t byte1 = (*iter++) & 0x0f;
        wchar_t byte2 = decode_utf8_mb(iter, last);
        wchar_t byte3 = decode_utf8_mb(iter, last);
        ret = (byte1 << 12) | (byte2 << 6) | byte3;
    }
    // TODO: support surrogate pairs
    else throw std::runtime_error("UTF-8 not convertable to UTF-16");

    return ret;
}

template<typename InputIterator, typename OutputIterator>
OutputIterator utf8_wchar(InputIterator first, InputIterator last, OutputIterator dest)
{
    for(; first!=last; ++dest)
        *dest = decode_utf8(first, last);
    return dest;
}

template<typename InputIterator, typename OutputIterator>
void encode_wchar(InputIterator iter, OutputIterator &dest)
{
    if(*iter <= 0x007F)
    {
        *dest=(char)*iter;
        ++dest;
    }
    else if(*iter <= 0x07FF)
    {
        *dest = (char)(
            0xC0 |
            ((*iter & 0x07C0) >> 6)
        );
        ++dest;

        *dest = (char)(
            0x80 |
            (*iter & 0x003F)
        );
        ++dest;
    }
    else if(*iter <= 0xFFFF)
    {
        *dest = (char)(
            0xE0 |
            ((*iter & 0xF000) >> 12)
        );
        ++dest;

        *dest = (char)(
            0x80 |
            ((*iter & 0x0FC0) >> 6)
        );
        ++dest;

        *dest = (char)(
            0x80 |
            (*iter & 0x003F)
        );
        ++dest;
    }
}

template<typename InputIterator, typename OutputIterator>
OutputIterator wchar_utf8(InputIterator first, InputIterator last, OutputIterator dest)
{
    for(; first!=last; ++first)
        encode_wchar(first, dest);
    return dest;
}

inline void utf8_wchar(const std::string &utf8, std::wstring &wide)
{
    wide.clear();
    utf8_wchar(utf8.begin(), utf8.end(), std::back_inserter(wide));
}

inline std::wstring utf8_wchar(const std::string &str)
{
    std::wstring ret;
    utf8_wchar(str, ret);
    return ret;
}

inline void wchar_utf8(const std::wstring &wide, std::string &utf8)
{
    utf8.clear();
    wchar_utf8(wide.begin(), wide.end(), std::back_inserter(utf8));
}

inline std::string wchar_utf8(const std::wstring &str)
{
    std::string ret;
    wchar_utf8(str, ret);
    return ret;
}

#endif



Это сообщение отредактировал(а) andrew_121 - 23.8.2009, 20:28


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
mes
Дата 23.8.2009, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


Профиль
Группа: Участник Клуба
Сообщений: 7954
Регистрация: 14.1.2006

Репутация: 144
Всего: 250



Цитата(nerezus @  23.8.2009,  19:13 Найти цитируемый пост)
bigturtle, в "сохранить как" выбери.

Я так понимаю что сохранить надо не исходники, а некий текст :
Цитата

 Как на си сохранит файл в кодировке utf-8



--------------------
PM MAIL WWW   Вверх
jonie
Дата 24.8.2009, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 15
Всего: 118





--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Torsten
Дата 24.8.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 174
Регистрация: 10.6.2008
Где: Pskov

Репутация: 3
Всего: 7



Ну для начала нужно знать в какой кодировке изначально у тебя текст, а ушь потом использовать какой-нибудь алгоритм/библиотеку для перекодировки в utf8.
--------------------
We have no begining, we have no end. We are infinite.
PM MAIL   Вверх
bigturtle
Дата 24.8.2009, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 78
Регистрация: 27.1.2009

Репутация: нет
Всего: нет



Спасибо всем за ответы smile 
Мне нужно действительно сохранить файл без данных....
вот, что я примерно нашел 
Код

FILE *f = fopen("data.txt", "w, ccs=UTF-8");


но в моей книжки не описан такой метод и на моем компиляторе он не работает ;)
PM MAIL   Вверх
Alexeis
Дата 24.8.2009, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 12
Всего: 459



Цитата(bigturtle @ 24.8.2009,  13:13)
Спасибо всем за ответы smile 
Мне нужно действительно сохранить файл без данных....
вот, что я примерно нашел 
Код

FILE *f = fopen("data.txt", "w, ccs=UTF-8");


но в моей книжки не описан такой метод и на моем компиляторе он не работает ;)

  Собственно об этом я тебя и предупреждал. Еще есть вариант с setlocale, но он тоже не работает. Правильное решение использовать внешние либы.


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
xvr
Дата 29.8.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Цитата(bigturtle @ 24.8.2009,  14:13)
Мне нужно действительно сохранить файл без данных....

Чем дальше в лес, тем толще партизаны  smile UTF-8 это кодировка ТЕКСТОВЫХ данных. 'Файл базы данных' - это вообще непонятно что, но точно не голый текст  smile Что и в чем надо сохранять то?
PM MAIL   Вверх
nerezus
Дата 29.8.2009, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 3
Всего: 43



Цитата

Мне нужно действительно сохранить файл без данных....
 А не парься, все файлы без данных имеют кодировку utf-8, так что твоя задача уже решена.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0783 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.