Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сохранение файлов в различных кодировках 
:(
    Опции темы
s1lver
Дата 7.1.2008, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(artsb @  6.1.2008,  20:04 Найти цитируемый пост)
А в каком каталоге у тебя лежит iconv.hpp? 


Lib. Вот я прикрепил файл iconv.

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  iconv.c 19,30 Kb


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
artsb
Дата 7.1.2008, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



iconv.c у меня есть. Но Fazil6 в своём примере подключал iconv.h, которого у меня нет.
Fazil6 разъясни ситуацию, плиз.

И ещё возник вопрос:
Содержимое файла, при его открытии, я помещаю в memo.
Если открываю файл, сохранённый в кодировке ANSI, то всё нормально. Но если файл был сохранён в другой кодировке (например, UTF-8), то в memo появляются всякие закорючки. Следовательно, нужно файл, при открытии, перевести в ANSI. Но как узнать в какой кодировке был сохранён открываемый файл?

Это сообщение отредактировал(а) artsb - 7.1.2008, 12:22


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Fazil6
Дата 7.1.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



ссылка на библиотеку 
Цитата(s1lver @  6.1.2008,  15:45 Найти цитируемый пост)
бериlibiconv-1.11.tar

 это в исходных кодах. Это нужно собирать. Как собирать описано в файле 
Install.generic и прочих readme

могу скинуть на мыло собраную версию 1.9 для Win32. Если что - PM

Это сообщение отредактировал(а) Fazil6 - 7.1.2008, 13:34
PM MAIL   Вверх
s1lver
Дата 9.1.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(artsb @  7.1.2008,  12:21 Найти цитируемый пост)
Если открываю файл, сохранённый в кодировке ANSI, то всё нормально. Но если файл был сохранён в другой кодировке (например, UTF-8), то в memo появляются всякие закорючки. Следовательно, нужно файл, при открытии, перевести в ANSI. Но как узнать в какой кодировке был сохранён открываемый файл?


На мой взгляд можно просто преобразовывать файлы при открытии из UTF-8 в ANSI, без выявления кодировки...... smile 

Вот попробовал примерчик.

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include <iconv.h>

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
namespace UTF8CONVERTER
{}
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{  
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if (OpenDialog1->Execute()) Memo1->Lines->LoadFromFile(OpenDialog1->FileName);        
 std::string CONVERTER::UTF8ToWin1251(const std::string &val)
{
    return UTF8CONVERTER::conv( "windows-1251", "UTF-8", val);
}}
//---------------------------------------------------------------------------



Ошибки:
[C++ Error] Unit1.cpp(26): E2316 'string' is not a member of 'std'
[C++ Error] Unit1.cpp(26): E2379 Statement missing ;

Может я что-то не так понял? Что надопоместить в namespace UTF8CONVERTER{}? 

Это сообщение отредактировал(а) s1lver - 9.1.2008, 10:19


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
artsb
Дата 9.1.2008, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(s1lver @  9.1.2008,  09:33 Найти цитируемый пост)
На мой взгляд можно просто преобразовывать файлы при открытии из UTF-8 в ANSI, без выявления кодировки.....

Если он уже был в ANSI, то получатся закорючки.

Fazil6 говорит, что распознать не получится. Можно просто сделать меню с выбором кодировки.


s1lver а откуда у тебя iconv.h?  smile 


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
s1lver
Дата 9.1.2008, 20:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мне Fazil6 скинул на мыло.
Цитата

Если он уже был в ANSI, то получатся закорючки.


а у тебя уже есть работающий код? 

Это сообщение отредактировал(а) s1lver - 9.1.2008, 20:45


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
artsb
Дата 9.1.2008, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(s1lver @  9.1.2008,  20:42 Найти цитируемый пост)
а у тебя уже есть работающий код? 

Да нет, я решил обойтись встроенными средствами. А библитеку просто так взял. Всё равно пригодится.  smile 



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
s1lver
Дата 9.1.2008, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(artsb @  9.1.2008,  21:02 Найти цитируемый пост)
я решил обойтись встроенными средствами.


??? можешь подсказать?


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
artsb
Дата 9.1.2008, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(s1lver @  9.1.2008,  21:28 Найти цитируемый пост)
??? можешь подсказать?

Дык я ж ранее скриншот из хэлпа кидал. В хэлпе пиши "Character set conversions". А там разберёшься.
Я сам ещё толком не разбирался. Пока другим занят.

Это сообщение отредактировал(а) artsb - 9.1.2008, 21:56


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
s1lver
Дата 20.1.2008, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



нарыл тут один примерчик, сейчас буду пробовать


Код

#include <windows.h>
#include <stdio.h>
#include <stdlib.h>

LPSTR xcode(LPCSTR src, UINT srcCodepage, UINT dstCodepage)
{
int wsize = MultiByteToWideChar(srcCodepage, 0, src, -1, NULL, 0);
LPWSTR wbuf = (LPWSTR)malloc(wsize*sizeof(WCHAR));
MultiByteToWideChar(srcCodepage, 0, src, -1, wbuf, wsize);
int size = WideCharToMultiByte(dstCodepage, 0, wbuf, -1, NULL, 0, NULL, NULL);
LPSTR buf = (LPSTR)malloc(size);
WideCharToMultiByte(dstCodepage, 0, wbuf, -1, buf, size, NULL, NULL);
free(wbuf);
return buf;
}


void main()
{
LPSTR p;

p = xcode("Дайте выпить поскорей!", 1251, 20866);
printf("KOI-8: %s\n", p);
free(p);

p = xcode("Дайте выпить поскорей!", 1251, 866);
printf("DOS-866: %s\n", p);
free(p);

p = xcode("Дайте выпить поскорей!", 1251, CP_UTF8);
printf("UTF-8: %s\n", p);
free(p);
}



--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
artsb
Дата 20.1.2008, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(s1lver @  20.1.2008,  15:18 Найти цитируемый пост)
нарыл тут один примерчик

Молодец. Пригодится...


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
KTatsu
Дата 25.11.2008, 04:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Прошу простить за "некропостерство", но вопрос все еще в силе - как собрать библиотеку?
Ридми и инсталл я нашел, но толком ничего не понял из их содержания.

И тоже не совсем понял данный код:
Код

#include <iconv.h>

.....

//=======================================================================


namespace UTF8CONVERTER
{
    std::string convert(iconv_t cd, const std::string &val)
    {
        if(cd == (iconv_t)-1) return "";

        const size_t INBUFSIZE    =     val.length() + 1;
        const size_t OUTBUFSIZE    = 512;

        size_t x = INBUFSIZE;
        
        char *in_buf = new char[INBUFSIZE]; // удалить


        strncpy(in_buf, val.c_str(), val.length());
        in_buf[val.length()] = 0;
        const char * tbf = in_buf;


        std::string res;
        size_t con;
        while(x)
        {
            char out_buf[OUTBUFSIZE + 1];  
            char *pout_buf = out_buf;
            
            memset(pout_buf,0,OUTBUFSIZE + 1);
            
            size_t y = OUTBUFSIZE;
            con = iconv(cd, /*(const char**)*/&tbf, &x, &pout_buf, &y);
            
            res += out_buf;
            
        }
        delete [] in_buf;
        return res;
    }

    std::string conv(const char to[], const char from[], const std::string &val)
    {
        iconv_t cd = iconv_open(to, from);
        std::string r = convert(cd, val);
        iconv_close(cd);
        return r;    
    }


};
std::string CONVERTER::UTF8ToWin1251(const std::string &val)
{
    return UTF8CONVERTER::conv( "windows-1251", "UTF-8", val);
}

std::string CONVERTER::Win1251ToUTF8(const std::string &val)
{
    return UTF8CONVERTER::conv("UTF-8", "windows-1251", val);    
}
Я понял из какой кодировки в какую конвертируется, но я не понял как привязать данный код, скажем к мемо...
PM MAIL   Вверх
Infector
Дата 15.3.2009, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А можно еще вопрос небольшой:
нужно кодировку ДОС перегнать в Ansi, соответственно пишу код:

  for (int i=1; i<Memo2->Lines->Count; i++)
  {
   Memo1->Lines->Add(Utf8ToAnsi(Memo2->Lines->Strings[i]));
  }
В результате все запускается, но вместо преобразования кодировки получаю удаление строк с русскоязычными символами
PM MAIL   Вверх
xvr
Дата 16.3.2009, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



ДОС - это не UTF8!

PM MAIL   Вверх
dumb
Дата 16.3.2009, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

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



Infector, OemToChar
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


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

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


 




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


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

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