Fix stdin/stdout encoding on Windows. (#2425)

QTextStream uses the system default locale, but this breaks in
various situations: (1) It does not work on the native Windows shell
(cmd.exe, Powershell), since the default Windows locale is Windows-1252,
but the shell uses Windows-850. (2) It also breaks on *nix systems where
the locale is Latin1 or C, which is the case for most CI systems or
build servers.

We allow overriding the detected codec by setting the ENCODING_OVERRIDE
environment variable, but otherwise prefer Windows-850 on Windows and
UTF-8 on any other system, even if LANG is set to something else.

This resolves #2413
This commit is contained in:
Janek Bevendorff
2018-10-28 19:55:00 +01:00
committed by GitHub
parent c9cab250c7
commit 7263dcddfe
19 changed files with 180 additions and 61 deletions

View File

@@ -455,12 +455,13 @@ void TestCli::testGenerate()
qint64 pos = 0;
// run multiple times to make accidental passes unlikely
TextStream stream(m_stdoutFile.data());
for (int i = 0; i < 10; ++i) {
generateCmd.execute(parameters);
m_stdoutFile->seek(pos);
stream.seek(pos);
QRegularExpression regex(pattern);
QString password = QString::fromUtf8(m_stdoutFile->readLine());
pos = m_stdoutFile->pos();
QString password = stream.readLine();
pos = stream.pos();
QVERIFY2(regex.match(password).hasMatch(), qPrintable("Password " + password + " does not match pattern " + pattern));
}
}