diff options
author | Erik Verbruggen <erik.verbruggen@digia.com> | 2013-08-19 15:47:51 +0200 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@digia.com> | 2013-09-11 09:43:14 +0200 |
commit | f7c68f6baf104729e8d2fb3a0693b3c59928f8d3 (patch) | |
tree | fc0b7227fb28425b65f194d1f6d58bb4d5f53299 /src/libs/utils/textfileformat.cpp | |
parent | eebb1dfcf4d0d4a391a77ab9e095188f63b616e4 (diff) | |
download | qt-creator-f7c68f6baf104729e8d2fb3a0693b3c59928f8d3.tar.gz |
C++: change working-copy to work on UTF-8 encoded QByteArrays.
These not only take less space than UTF-16 encoded QStrings, but due to
the caching in the CppEditorSupport also take less time to build.
This patch also fixes a number of possible encoding issues, where files
and constant strings were (falsely) assumed to be UTF-8.
Change-Id: Ib6f91c9a94ebed5b5dfbd4eb2998825c62c72784
Reviewed-by: Nikolai Kosjar <nikolai.kosjar@digia.com>
Reviewed-by: hjk <hjk121@nokiamail.com>
Diffstat (limited to 'src/libs/utils/textfileformat.cpp')
-rw-r--r-- | src/libs/utils/textfileformat.cpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/libs/utils/textfileformat.cpp b/src/libs/utils/textfileformat.cpp index df657b7803..26dac75df3 100644 --- a/src/libs/utils/textfileformat.cpp +++ b/src/libs/utils/textfileformat.cpp @@ -271,6 +271,39 @@ TextFileFormat::ReadResult return result; } +TextFileFormat::ReadResult TextFileFormat::readFileUTF8(const QString &fileName, + QByteArray *plainText, QString *errorString) +{ + QByteArray data; + try { + Utils::FileReader reader; + if (!reader.fetch(fileName, errorString)) + return TextFileFormat::ReadIOError; + data = reader.data(); + } catch (const std::bad_alloc &) { + *errorString = QCoreApplication::translate("Utils::TextFileFormat", "Out of memory."); + return TextFileFormat::ReadMemoryAllocationError; + } + + TextFileFormat format = TextFileFormat::detect(data); + if (!format.codec) + format.codec = QTextCodec::codecForLocale(); + if (format.codec->name() == "UTF-8") { + if (format.hasUtf8Bom) + data.remove(0, 3); + *plainText = data; + return TextFileFormat::ReadSuccess; + } + + QString target; + if (!format.decode(data, &target)) { + *errorString = QCoreApplication::translate("Utils::TextFileFormat", "An encoding error was encountered."); + return TextFileFormat::ReadEncodingError; + } + *plainText = target.toUtf8(); + return TextFileFormat::ReadSuccess; +} + /*! \brief Write out a text file. */ |