crossplatform.ru

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


  Ответ в Проблема с кодировками
Введите ваше имя
Подтвердите код

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

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


Последние 10 сообщений [ в обратном порядке ]
XpycT Дата 17.11.2009, 17:30
  как текстовый редактор не вариант - такое у меня уже есть...но долго так работать...вот и надо было автоматизировать..
а под батником этот файлик прекрасно сам все конвертирует :)
Litkevich Yuriy Дата 17.11.2009, 14:02
  Есть такой пример:
%QTDIR%\examples\tools\codecs
можно использовать как текстовый редактор с поддержкой множества кодировок, ну и исходники посмотреть.
XpycT Дата 17.11.2009, 13:57
  Все спасибо - и без БОМ переварило нормально :)
Litkevich Yuriy Дата 17.11.2009, 13:43
 
Цитата(XpycT @ 17.11.2009, 16:37) *
но все равно явно кодировка не совпадает
полностью совпадает. Посто маркера в начале файла нет, как его добавить я пока не понял
XpycT Дата 17.11.2009, 13:37
  Всеже лучше чем мой вариант, но все равно явно кодировка не совпадает...сейчас протестирую результат - может и прокатит :)
Litkevich Yuriy Дата 17.11.2009, 13:22
 
Цитата(XpycT @ 17.11.2009, 14:57) *
QTextCodec::setCodecForCStrings( pCodec);
это ни к чему

Вот мой вариант:
Раскрывающийся текст
#include <QtCore>
#include <QTextCodec>

int main(int argc, char *argv[])
{

    QCoreApplication app(argc, argv);

    if (argc==2)
        {
                QString rszFile=argv[1];
                ////////
                QFile fileRead( rszFile);
                if( !fileRead.open( QIODevice::ReadOnly))
                {
                    qCritical( "Can'not open file: %s for read", qPrintable( rszFile));
                    return false;
                }
                QTextCodec *pCodec = QTextCodec::codecForName("UTF-16LE");

                QString szData;
                QTextStream in( &fileRead);
                in.setCodec( pCodec);
                QString szLine;
                int cnt = 0;
                while(!in.atEnd())
                {
                    szLine = in.readLine();
                    qDebug() << "Line#" << cnt++;
                    szData += szLine + "\r\n";
                }

                fileRead.close();
                qDebug()<<szData.toLocal8Bit();
                // Здесь идет некая обработка данных...
                
                QFile fileWrite( rszFile+"111");
                if( !fileWrite.open( QIODevice::WriteOnly))
                {
                    qCritical( "Can'not open file: %s for read", qPrintable( rszFile));
                    return false;
                }
                QTextStream out( &fileWrite);
                out.setCodec( pCodec);
                out << szData;
                fileWrite.close();
                ////////

        }else
        {
                printf("Usage : tlrusencode file.dat\n");
        }

    return 1;
}
но он даёт выходную кодировку без маркера (with out BOM)

Цитата(XpycT @ 17.11.2009, 14:57) *
szData = szData.toLocal8Bit();
эта строка всё портит
XpycT Дата 17.11.2009, 11:57
  Всем привет.
Есть у меня примерно 4000+ файлов в кодировке UCS-2 Little Endian (UTF-16LE). Суть задачи - сделать консольное приложение для автоматической обработки и пересохранения файла в такой же кодировке. Проблема в том что читаемая кодировка получается только в ANSI, а в UTF-16LE все в не читаемом виде. Нашел подобную тему на форуме, но все равно не выходит. :(

Код консольки:
#include <stdio.h>
#include <QtCore>
#include <QTextCodec>

int main(int argc, char *argv[])
{

    QCoreApplication app(argc, argv);

    if (argc==2)
        {
                QString rszFile=argv[1];
                ////////
                QFile fileRead( rszFile);
                if( !fileRead.open( QIODevice::ReadOnly))
                {
                    qCritical( "Can'not open file: %s for read", qPrintable( rszFile));
                    return false;
                }
                QTextCodec *pCodec = QTextCodec::codecForName("UTF-16LE");
                QTextCodec::setCodecForCStrings( pCodec);

                QString szData;
                QTextStream out( &fileRead);
                out.setCodec( pCodec);
                QString szLine;
                do
                {
                    szLine = out.readLine();
                    szData += szLine + "\r\n";
                }while( !szLine.isNull());

                fileRead.close();
                szData = szData.toLocal8Bit();
                qDebug()<<szData;
                // Здесь идет некая обработка данных...
                
                QTextCodec::setCodecForCStrings(pCodec);

                QFile fileWrite( rszFile+"111");
                if( !fileWrite.open( QIODevice::WriteOnly))
                {
                    qCritical( "Can'not open file: %s for read", qPrintable( rszFile));
                    return false;
                }
                QTextStream in( &fileWrite);
                in.setCodec( pCodec);
                in << szData;
                fileWrite.close();
                ////////

        }else
        {
                printf("Usage : tlrusencode file.dat\n");
        }

    return 1;
}


и тестовый файлик Прикрепленный файл  QUEST1.zip ( 1.45 килобайт ) Кол-во скачиваний: 153


Помогите разобраться :rolleyes:
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 28.3.2024, 19:01