From 39bec1ce172e7e5dbcdbf84858563a2dd2dd9dfc Mon Sep 17 00:00:00 2001 From: execjosh Date: Tue, 26 Mar 2013 21:34:28 +0900 Subject: [PATCH] Synchronize std{in,out,err} encoding with `Terminal` See #11234 https://github.com/ariya/phantomjs/pull/11234 Spin off from #11168 https://github.com/ariya/phantomjs/pull/11168 --- src/encoding.h | 4 ++-- src/system.cpp | 24 +++++++++++++++++++++++- src/system.h | 3 +++ 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/encoding.h b/src/encoding.h index 718bd1c9..ae0a94f0 100644 --- a/src/encoding.h +++ b/src/encoding.h @@ -46,11 +46,11 @@ public: QString getName() const; void setEncoding(const QString &encoding); + QTextCodec *getCodec() const; + static const Encoding UTF8; private: - QTextCodec *getCodec() const; - QTextCodec *m_codec; static const QByteArray DEFAULT_CODEC_NAME; }; diff --git a/src/system.cpp b/src/system.cpp index 5abfa86c..e0883881 100644 --- a/src/system.cpp +++ b/src/system.cpp @@ -37,6 +37,7 @@ #include #include "../env.h" +#include "terminal.h" System::System(QObject *parent) : QObject(parent) @@ -124,6 +125,8 @@ System::System(QObject *parent) : m_os.insert("name", "unknown"); m_os.insert("version", "unknown"); #endif + + connect(Terminal::instance(), SIGNAL(encodingChanged(QString)), this, SLOT(_onTerminalEncodingChanged(QString))); } System::~System() @@ -203,10 +206,29 @@ QObject *System::_stdin() { return m_stdin; } +// private slots: + +void System::_onTerminalEncodingChanged(const QString &encoding) +{ + if ((File *)NULL != m_stdin) { + m_stdin->setEncoding(encoding); + } + + if ((File *)NULL != m_stdout) { + m_stdout->setEncoding(encoding); + } + + if ((File *)NULL != m_stderr) { + m_stderr->setEncoding(encoding); + } +} + // private: File *System::createFileInstance(QFile *f) { - QTextCodec *codec = QTextCodec::codecForName("UTF-8"); + // Get the Encoding used by the Terminal at this point in time + Encoding e(Terminal::instance()->getEncoding()); + QTextCodec *codec = e.getCodec(); return new File(f, codec, this); } diff --git a/src/system.h b/src/system.h index 2af9b285..93f75ea3 100644 --- a/src/system.h +++ b/src/system.h @@ -76,6 +76,9 @@ public: // system.stdin QObject *_stdin(); +private slots: + void _onTerminalEncodingChanged(const QString &encoding); + private: File *createFileInstance(QFile *f);