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
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 180 additions and 61 deletions

View file

@ -20,8 +20,8 @@
#include <QCommandLineParser>
#include <QCoreApplication>
#include <QStringList>
#include <QTextStream>
#include "cli/TextStream.h"
#include <cli/Command.h>
#include "config-keepassx.h"
@ -46,7 +46,7 @@ int main(int argc, char** argv)
Bootstrap::bootstrapApplication();
#endif
QTextStream out(stdout);
TextStream out(stdout);
QStringList arguments;
for (int i = 0; i < argc; ++i) {
arguments << QString(argv[i]);