Russian Qt Forum

Qt => Общие вопросы => Тема начата: NortT от Июнь 14, 2011, 15:52



Название: Проблема с кодировками
Отправлено: NortT от Июнь 14, 2011, 15:52
Всем привет. Возникла проблема. Пишу софтинку, которая имеет textEdit. Данные едита сохраняются в текстовый файл в html виде. Если запустить софтину под линуксом, сохранить файл и затем его открыть его в этой же софтине, но в винде, то все ок. Если же создать файл под виндой, сохранить его и переоткрыть опять же под виндой, то ломается кодировка (ромбики черные с вопросами белыми внутри). При чем если открыть оба эти файла в обычном виндовом блокноте, то все нормально, текст отображается у все нормально. Как это можно поправить?


Название: Re: Проблема с кодировками
Отправлено: iks от Июнь 14, 2011, 16:07
Я в таком случае делаю проще или перезагружаю файл в cp1251, но чаще Ctrl+S Ctrl+C и Ctrl+V тоже бывает что винда меняет кодировки если начинаеш в ней править и потом запускаеш по Linux. А еще можно сразу создавать файлы в cp1251 и уже проблем не будет


Название: Re: Проблема с кодировками
Отправлено: kambala от Июнь 14, 2011, 16:48
А еще можно сразу создавать файлы в cp1251 и уже проблем не будет
почему не utf-8 (16, или даже 32)?


Название: Re: Проблема с кодировками
Отправлено: NortT от Июнь 14, 2011, 18:27
А как перегружаешь?
При сохранении из едита в файл у меня документ имеет такой вид:
Код
HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
А как мне программно изменить meta, чтоб явно указать, что текст хранится в утф8?


Название: Re: Проблема с кодировками
Отправлено: zenden от Июнь 14, 2011, 18:55
покажи код сохранения и загрузки


Название: Re: Проблема с кодировками
Отправлено: LisandreL от Июнь 14, 2011, 20:46
покажи код сохранения и загрузки
И установки кодировок.


Название: Re: Проблема с кодировками
Отправлено: iks от Июнь 14, 2011, 21:28
Ну я вообще говорил о файлах самого проекта, до этого, то-есть .h .cpp .pro, а так я всегда проще делаю, в самом начале mail вставляю строку
Код:
QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf-8"));
и как-то не приходилось напарываться на проблему сохранения файлов самой прогой


Название: Re: Проблема с кодировками
Отправлено: NortT от Июнь 15, 2011, 03:13
Кодировку задаю вот так:
Код
C++ (Qt)
   QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8"));
   QTextCodec::setCodecForTr(QTextCodec::codecForName("utf8"));  
А сохранение показать сложнее... У меня кол-во текстЕдитов произвольное, и html-код едитов я при сохранении запихиваю в QDomDocument и после этого зипую получившийся хмл. Последний этап сохранения такой:
Код
C++ (Qt)
if (fileIsOpen)
{
   QTextStream (&file) << domDocument.toString();
}
file.close();
Вот так пихаю в хмл (на примере одного элемента):
Код
C++ (Qt)
       QDomElement answerText = domDocument.createElement("answerText");
       QDomText text = domDocument.createTextNode(t.getListAnswer().getAnswer(i).getTextAnswer());
       answerText.appendChild(text);
Заголовок у хмл документа задаю так:
Код
C++ (Qt)
QDomProcessingInstruction instr = doc.createProcessingInstruction("xml","version='1.0' encoding='UTF-8'");


Название: Re: Проблема с кодировками
Отправлено: DmP от Июнь 15, 2011, 11:03
Можно использовать следующие ф-ции, и все будет работать одиноково:
void QDomNode::save ( QTextStream & str, int indent, EncodingPolicy encodingPolicy ) const (http://doc.qt.nokia.com/4.7/qdomnode.html#save-2)
void QTextStream::setCodec ( const char * codecName ) (http://doc.qt.nokia.com/4.7/qtextstream.html#setCodec-2)


Название: Re: Проблема с кодировками
Отправлено: NortT от Июнь 16, 2011, 13:42
То что надо!  8)