crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

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


Последние 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 Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 6:32