diff --git a/src/flac/main.c b/src/flac/main.c
index 4abc192..40f5220 100644
--- a/src/flac/main.c
+++ b/src/flac/main.c
@@ -310,7 +310,20 @@ int main(int argc, char *argv[])
 #endif
 
 	srand((unsigned)time(0));
+#ifdef _WIN32
+	{
+		const char *var;
+		var = getenv("LC_ALL");
+		if (!var)
+			var = getenv("LC_NUMERIC");
+		if (!var)
+			var = getenv("LANG");
+		if (!var || strcmp(var, "C") != 0)
+			setlocale(LC_ALL, "");
+	}
+#else
 	setlocale(LC_ALL, "");
+#endif
 	if(!init_options()) {
 		flac__utils_printf(stderr, 1, "ERROR: allocating memory\n");
 		retval = 1;
diff --git a/src/metaflac/main.c b/src/metaflac/main.c
index 2e28a88..8b99369 100644
--- a/src/metaflac/main.c
+++ b/src/metaflac/main.c
@@ -43,7 +43,20 @@ int main(int argc, char *argv[])
 	}
 #endif
 
+#ifdef _WIN32
+	{
+		const char *var;
+		var = getenv("LC_ALL");
+		if (!var)
+			var = getenv("LC_NUMERIC");
+		if (!var)
+			var = getenv("LANG");
+		if (!var || strcmp(var, "C") != 0)
+			setlocale(LC_ALL, "");
+	}
+#else
 	setlocale(LC_ALL, "");
+#endif
 	init_options(&options);
 
 	if ((ret = parse_options(argc, argv, &options)) == 0)
