Convert to the console charset only if the stream outputs to the console
diff --git a/glib/gmessages.c b/glib/gmessages.c index c24fab6..145e9c4 100644 --- a/glib/gmessages.c +++ b/glib/gmessages.c
@@ -77,15 +77,16 @@ #endif #ifdef G_OS_WIN32 +#include "gwin32.h" +#include "gwin32private.h" + #include <process.h> /* For getpid() */ #include <io.h> -# include <windows.h> +#include <windows.h> #ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING #define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004 #endif - -#include "gwin32.h" #endif /** @@ -3470,12 +3471,30 @@ print_string (FILE *stream, const gchar *string) { - const gchar *charset; + const gchar *charset = NULL; + bool print_utf8; int ret; - if (g_get_console_charset (&charset)) +#ifdef _WIN32 + int fd; + HANDLE handle; + + fd = _fileno (stream); + if (fd < 0) + return; + + handle = (HANDLE) _get_osfstream (fd); + + if (g_win32_handle_is_console_output (handle)) + print_utf8 = g_get_console_charset (&charset); + else + print_utf8 = true; +#else + print_utf8 = g_get_charset (&charset); +#endif + + if (print_utf8) { - /* charset is UTF-8 already */ ret = fputs (string, stream); } else