On Thu, May 24, 2012 at 10:26 AM, Thiago Macieira
<thiago.macie...@intel.com> wrote:
> On quinta-feira, 24 de maio de 2012 10.05.50, 1+1=2 wrote:
>> At present, when QT_NO_TEXTCODEC is defined, QTextStream use
>> QString::fromLatin1() /QString::toLocal8Bit()
>> to convert from/to bytes which looks like not very well. So I think it
>> will be better to replace them with QUtf8::convertFromUnicode() and
>> QUtf8::convertToUnicode().
>
> Keep them Latin1. At least the tools will not screw up user data if they can't
> figure out the locale.
>

The problem is that, QTextStream has different behavior depending on
whether  QT_NO_TEXTCODEC is defined or not.

When QT_NO_TEXTCODEC is defined, default codec is
QTextCodec::codecForLocale(), but can be changed using
QTextStream::setCodec().

When QT_NO_TEXTCODEC isn't defined, QString::fromLatin1()
/QString::toLocal8Bit() is used, and they can't canged by users. I
think this is broken for non-latin1-locale users. If they want to
read/write the same file, it indeed will screw up user data ;-)

Even if we want need to keep qmake project file latin1 only, we can
directly using QFile instead of QTextStream, as the features of
QTextStream aren't used by qmake. For example

Line 1825 of qmake/project.cpp:

            QFile qfile(file);
            if(qfile.open(QIODevice::ReadOnly)) {
                QTextStream stream(&qfile);
                while(!stream.atEnd()) {
                    ret += split_value_list(stream.readLine().trimmed());
                    if(!singleLine)
                        ret += "\n";
                }
                qfile.close();
            }
_______________________________________________
Development mailing list
Development@qt-project.org
http://lists.qt-project.org/mailman/listinfo/development

Reply via email to