summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEduard Braun <eduard.braun2@gmx.de>2017-05-10 00:21:03 +0000
committerEduard Braun <eduard.braun2@gmx.de>2017-05-10 00:21:03 +0000
commite1097ab39decf853abbb6a934c47afa841445237 (patch)
tree1618542c3b345d610e00852f764eeaee90b1e322 /src
parentcmake/Windows: convert all 'DESTINATION's to relative paths and allow easy cu... (diff)
downloadinkscape-e1097ab39decf853abbb6a934c47afa841445237.tar.gz
inkscape-e1097ab39decf853abbb6a934c47afa841445237.zip
Use UTF8 encoding for output on windows console.
This avoids the misery and frustration of converting to the overly limited ANSI codepages and does not seem to cause any issues so far. (bzr r15682)
Diffstat (limited to 'src')
-rw-r--r--src/helper/gettext.cpp23
-rw-r--r--src/winconsole.cpp8
2 files changed, 20 insertions, 11 deletions
diff --git a/src/helper/gettext.cpp b/src/helper/gettext.cpp
index 0972d4e19..91dfdbcb8 100644
--- a/src/helper/gettext.cpp
+++ b/src/helper/gettext.cpp
@@ -49,9 +49,8 @@ void initialize_gettext() {
bindtextdomain(GETTEXT_PACKAGE, localepath);
g_free(shortdatadir);
g_free(localepath);
-
- g_free(datadir);
+ g_free(datadir);
#else
# ifdef ENABLE_BINRELOC
bindtextdomain(GETTEXT_PACKAGE, BR_LOCALEDIR(""));
@@ -79,21 +78,23 @@ void bind_textdomain_codeset_utf8() {
bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
}
-/** set gettext codeset to codeset of the console
+/** set gettext codeset to codeset of the system console
* - on *nix this is typically the current locale,
- * - on Windows it has to be determined using GetConsoleOutputCP() */
+ * - on Windows we don't care and simply use UTF8
+ * any conversion would need to happen in our console wrappers (see winconsole.cpp) anyway
+ * as we have no easy way of determining console encoding from inkscape/inkview.exe process;
+ * for now do something even easier - switch console encoding to UTF8 and be done with it!
+ * this also works nicely on MSYS consoles where UTF8 encoding is used by default, too */
void bind_textdomain_codeset_console() {
+#ifdef WIN32
+ bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
+#else
std::string charset;
Glib::get_charset(charset);
-
- // TODO: does not work properly as we spawn a child process on Windows
- // (inkscape.exe is not a console application and can never print directly to console)
- //unsigned int test = GetConsoleOutputCP();
- //g_message("CP%u", test);
-
bind_textdomain_codeset(GETTEXT_PACKAGE, charset.c_str());
+#endif
}
-
+
}
diff --git a/src/winconsole.cpp b/src/winconsole.cpp
index 085fb441c..f91b19c5c 100644
--- a/src/winconsole.cpp
+++ b/src/winconsole.cpp
@@ -100,6 +100,11 @@ int main()
// it guarantees perfect behavior w.r.t. quoting
WCHAR *cmd = GetCommandLineW();
+ // temporarily switch console encoding to UTF8 while the spwaned process runs
+ // as everything else is a mess and it seems to work just fine
+ const unsigned int initial_cp = GetConsoleOutputCP();
+ SetConsoleOutputCP(CP_UTF8);
+
// set up the pipes and handles
stdin.echo_read = GetStdHandle(STD_INPUT_HANDLE);
stdout.echo_write = GetStdHandle(STD_OUTPUT_HANDLE);
@@ -148,6 +153,9 @@ int main()
// wait until the standard output thread terminates
WaitForSingleObject(stdout_thread, INFINITE);
+ // switch back to initial console encoding
+ SetConsoleOutputCP(initial_cp);
+
return 0;
}