/* http://cygwin.com/1.7/cygwin-ug-net/ov-new1.7.html#ov-new1.7-posix - A lot of character sets are supported now via a call to setlocale(). The setting of the environment variables $LANG, $LC_ALL or $LC_CTYPE will be used. For instance, setting $LANG to "de_DE.ISO-8859-15" before starting a Cygwin session will use the ISO-8859-15 character set in the entire session. UTF-8 is supported as well, as in "en_US.UTF-8". */ #include #include #include void setlocale_test() { char * const lc_all = getenv("LC_ALL"); char * const lang = getenv("LANG"); char * const cygwin = getenv("CYGWIN"); if (!setlocale(LC_ALL, "")) { printf("setlocale(LC_ALL,\"\") failed\n"); } else { printf("setlocale(LC_ALL,\"\") okay\n"); } printf("with\tLC_ALL = %s\n", lc_all); printf("\tLANG = %s\n", lang); printf("\tCYGWIN = %s\n", cygwin); } int main (int argc, char** argv) { putenv("LC_ALL="); putenv("LANG="); putenv("CYGWIN="); setlocale_test(); putenv("LC_ALL=utf-8"); putenv("LANG="); putenv("CYGWIN="); setlocale_test(); putenv("LC_ALL="); putenv("LANG=en_US.UTF-8"); putenv("CYGWIN="); setlocale_test(); putenv("LC_ALL=UTF-8"); putenv("LANG="); putenv("CYGWIN="); setlocale_test(); putenv("LC_ALL=UTF-8"); putenv("LANG="); putenv("CYGWIN=codepage:utf-8"); setlocale_test(); putenv("LC_ALL=UTF-8"); /* error */ putenv("LANG=en_US.UTF-8"); putenv("CYGWIN=codepage:utf-8"); setlocale_test(); putenv("LC_ALL="); putenv("LANG=en_US.UTF-8"); putenv("CYGWIN=codepage:utf-8"); setlocale_test(); putenv("LC_ALL=en_US.UTF-8"); putenv("LANG="); putenv("CYGWIN="); setlocale_test(); putenv("LC_ALL=en_US.UTF-8"); putenv("LANG=en_US.UTF-8"); putenv("CYGWIN="); setlocale_test(); putenv("LC_ALL=en_US.utf-8"); /* okay on linux! */ putenv("LANG="); putenv("CYGWIN="); setlocale_test(); putenv("LC_ALL=de.UTF-8"); putenv("LANG="); putenv("CYGWIN="); setlocale_test(); putenv("LC_ALL=en_US.utf-8"); /* okay on linux! */ putenv("LANG=en_US.utf-8"); putenv("CYGWIN="); setlocale_test(); }