--- lame-3.100/frontend/parse.c.orig	2017-10-15 11:49:51.389922000 +0200
+++ lame-3.100/frontend/parse.c	2017-10-15 11:56:02.377439500 +0200
@@ -70,8 +70,6 @@
 #ifdef HAVE_ICONV
 #include <iconv.h>
 #include <errno.h>
-#include <locale.h>
-#include <langinfo.h>
 #endif
 
 #if defined _ALLOW_INTERNAL_OPTIONS
@@ -153,7 +151,9 @@
     size_t n = 1;
     char dst[32];
     char* src = "A";
-    char* cur_code = nl_langinfo(CODESET);
+    char* env_lang = getenv("LANG");
+    char* xxx_code = env_lang == NULL ? NULL : strrchr(env_lang, '.');
+    char* cur_code = xxx_code == NULL ? "" : xxx_code+1;
     iconv_t xiconv = iconv_open(cur_code, "ISO_8859-1");
     if (xiconv != (iconv_t)-1) {
         for (n = 0; n < 32; ++n) {
@@ -181,7 +181,9 @@
         size_t const n = l*4;
         dst = calloc(n+4, 4);
         if (dst != 0) {
-            char* cur_code = nl_langinfo(CODESET);
+            char* env_lang = getenv("LANG");
+            char* xxx_code = env_lang == NULL ? NULL : strrchr(env_lang, '.');
+            char* cur_code = xxx_code == NULL ? "" : xxx_code+1;
             iconv_t xiconv = iconv_open(cur_code, "ISO_8859-1");
             if (xiconv != (iconv_t)-1) {
                 char* i_ptr = src;
@@ -205,7 +207,9 @@
         size_t const n = l*4;
         dst = calloc(n+4, 4);
         if (dst != 0) {
-            char* cur_code = nl_langinfo(CODESET);
+            char* env_lang = getenv("LANG");
+            char* xxx_code = env_lang == NULL ? NULL : strrchr(env_lang, '.');
+            char* cur_code = xxx_code == NULL ? "" : xxx_code+1;
             iconv_t xiconv = iconv_open(cur_code, "UTF-16LE");
             if (xiconv != (iconv_t)-1) {
                 char* i_ptr = (char*)src;
@@ -231,7 +235,9 @@
         size_t const n = l*4;
         dst = calloc(n+4, 4);
         if (dst != 0) {
-            char* cur_code = nl_langinfo(CODESET);
+            char* env_lang = getenv("LANG");
+            char* xxx_code = env_lang == NULL ? NULL : strrchr(env_lang, '.');
+            char* cur_code = xxx_code == NULL ? "" : xxx_code+1;
             iconv_t xiconv = iconv_open("ISO_8859-1//TRANSLIT", cur_code);
             if (xiconv != (iconv_t)-1) {
                 char* i_ptr = (char*)src;
@@ -257,7 +263,9 @@
         size_t const n = (l+1)*4;
         dst = calloc(n+4, 4);
         if (dst != 0) {
-            char* cur_code = nl_langinfo(CODESET);
+            char* env_lang = getenv("LANG");
+            char* xxx_code = env_lang == NULL ? NULL : strrchr(env_lang, '.');
+            char* cur_code = xxx_code == NULL ? "" : xxx_code+1;
             iconv_t xiconv = iconv_open("UTF-16LE//TRANSLIT", cur_code);
             dst[0] = 0xff;
             dst[1] = 0xfe;
@@ -1513,9 +1521,6 @@
     enum TextEncoding id3_tenc = TENC_LATIN1;
 #endif
 
-#ifdef HAVE_ICONV
-    setlocale(LC_CTYPE, "");
-#endif
     inPath[0] = '\0';
     outPath[0] = '\0';
     /* turn on display options. user settings may turn them off below */
