This is the mail archive of the
cygwin-apps
mailing list for the Cygwin project.
Re: setup for 1.7 fails with Japanese characters in download
- From: Andy Koppe <andy dot koppe at gmail dot com>
- To: cygwin-apps at cygwin dot com
- Date: Sat, 3 Oct 2009 08:51:59 +0100
- Subject: Re: setup for 1.7 fails with Japanese characters in download
- References: <20091003100318.1312@binki>
wynfield:
> My base os is Japanese OEM Windows XP.
>
> I've only used the standard c:\cygwin-packages directory, so have not had any problems. But, to confirm Gernot's report, I created a ÂC:\japanese_dirnameææèå directory and tried to download a package into it. ÂIt fails.
>
> setup reports the following type of message:
>
> No such file or directory: C:\japanese_dirnameææèå/http%3...../release-2/..bzip_filename
The problem is that setup.exe's GUI uses the default ANSI codepage
(932 in this case), whereas MSVCRT functions such as fopen() use the
"C" locale by default. In the C locale, multibyte<->widechar
conversion is a simple cast, which effectively yields ISO-8859-1.
(Just to be clear, this is nothing to do with Cygwin/newlib's locale
system, since setup.exe is a MinGW app).
Now theoretically it should be possible to address this with a
'setlocale(LC_ALL, "")' call. However, after changing my Win7 system's
default codepage to Japanese, I found that GetACP() would indeed
return 932, but that 'setlocale(LC_ALL, "")' still yielded
"English_United Kingdom.1252".
Hence the slightly more circuitous route in the patch below. Seems to
do the job.
Andy
--- main.cc 20 Sep 2009 16:41:30 -0000 2.56
+++ main.cc 3 Oct 2009 07:36:33 -0000
@@ -225,6 +225,11 @@ main (int argc, char **argv)
hinstance = GetModuleHandle (NULL);
#endif
+ // Make sure the C runtime functions use the same codepage as the GUI
+ char locale[12];
+ snprintf(locale, sizeof locale, ".%u", GetACP());
+ setlocale(LC_ALL, locale);
+
try {
char cwd[MAX_PATH];
GetCurrentDirectory (MAX_PATH, cwd);