crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в Кодировки, кодировки...
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
kwisp Дата 27.2.2010, 11:38
  смотри еще
enca enconv по ссылке сообщение на этом форуме
и
iconv
это простенькие утилиты под линукс.
я ими пользуюсь:)

П.С.
По-моему, прога твоя будет полезна чисто в образовательных целях.
Практически уже эта проблема решена.
Но ты запал не теряй. :)
Litkevich Yuriy Дата 27.2.2010, 4:41
  Rocky, посмотри ещё программу Notepad++, она определяет кодировку самостоятельно (иногда ошибается, когда всё на аглицком написано)
Rocky Дата 26.2.2010, 23:33
  ок, попробуем разобраться) спасибо
SABROG Дата 26.2.2010, 23:02
  Наткнулся на такую библиотеку определения кодировки. Написана на Си, алгоритм содран с детектора Мозиллы, лицензия LGPL.
Rocky Дата 26.2.2010, 21:59
  Мдя... а я думал за пару часиков напишу все ) Видимо придется повозиться, если запал не пройдет )
SABROG Дата 26.2.2010, 21:30
 
Цитата(Rocky @ 26.2.2010, 20:21) *
не позволяет определить автоматически кодировку


Qt умеет определять только UTF16/32 по BOM'у. Так что на него не полагайся. Твоя задача сводится к реализации своего варианта программы "Штирлиц", но даже она ошибается. Поэтому проси пользователя, чтобы жестко задавал исходную и желаемую кодировки, если автоматически определить не удалось. Думаю в интернете должны быть статьи как по частотному анализу букв определить кодировку файла. В разных языках частота встречаемости тоже разная Может быть даже готовые библиотеки есть какие-нибудь.

Простой алгоритм заключает в том, чтобы последовательно предполагать кодировки файлов и пытаться конвертировать другую, затем подсчитывать встречаемость букв. Но этот алгоритм будет работать только на более менее больших файлах, где русский и английский текст не миксуются 50/50.
Rocky Дата 26.2.2010, 20:21
  Т.е. нужно сначала определить исходную кодировку,затем написать так
 QTextStream oInStream(&oSourceFile);
oInStream.setCodec(....);

Т.е. установить "потоку исходного файла" нужную кодировку и затем уже его считывать и перекодировать в заданной, так? А я почему-то решил что когда делаеш так QTextStream oInStream(&oSourceFile); - oInStream уже в нужной кодировке (в кодировке файла oSourceFile)... Значит пошел разбираться как определять исходную кодировку... Где-то тут вроде уже речь шла про это, остановились вроде как на notepad++. Вобщем, поищу его исходники. Наверное так.

UPD
Цитата(Litkevich Yuriy @ 26.2.2010, 20:05) *
дак ведь есть уже:
%QTDIR%\examples\tools\codecs
можешь на его основе сделать, заодно и посмотришь как это делается.

О, спасибо )

UPD
оказывается %QTDIR%\examples\tools\codecs не позволяет определить автоматически кодировку (
Litkevich Yuriy Дата 26.2.2010, 20:05
 
Цитата(Rocky @ 26.2.2010, 22:28) *
Я хочу сделать бесплатный =) перекодировщик файлов.
дак ведь есть уже:
%QTDIR%\examples\tools\codecs
можешь на его основе сделать, заодно и посмотришь как это делается.
BRE Дата 26.2.2010, 20:04
 
Цитата(Rocky @ 26.2.2010, 19:52) *
Он ведь не должен- меняться если он уже в этой кодировке? Или нет? или я туплю (

Как-же не должен, именно должен меняться.
Если ты ошибешься с исходной кодировкой, ты всегда будешь видеть кашу.
А сейчас ты именно ошибаешься, файл в кодировке UTF-8 а ты его читаешь как win1251.
Rocky Дата 26.2.2010, 19:52
  Сорри, в конце недели туго с речью)

Есть файл in.txt в кодировке win1251. Я его конвертирую в utf-8 и сохраняю в out.txt. Потом in.txt удаляю, out.txt копирую с новым именем (in.txt), потом out.txt удаляю - т.е. как бы меняю имя файла.
    //удаляем sSourceFile
    if (!QFile::remove(sSourceFile))
    {
        QMessageBox::critical(NULL, m_roMessages[eCaption], m_roMessages[eErrorSourceFileNotDeleted].arg(sSourceFile));
        return;
    }

    //копируем sTargetFile в sSourceFile
    if (!QFile::copy(sTargetFile, sSourceFile))
    {
        QMessageBox::critical(NULL, m_roMessages[eCaption], m_roMessages[eErrorSourceFileNotReplaced].arg(sSourceFile));
        return;
    }

    //удаляем sTargetFile
    if (!QFile::remove(sTargetFile))
    {
        QMessageBox::critical(NULL, m_roMessages[eCaption], m_roMessages[eErrorTargetFileNotDeleted].arg(sSourceFile));
        return;
    }


В итоге новый in.txt в кодировке utf-8.

Затем беру этот новый in.txt и снова его конвертирую в туже utf-8.... Он ведь не должен меняться если он уже в этой кодировке? Или нет? или я туплю (
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 27.4.2024, 22:26