From: SourceForge.net <no...@so...> - 2010-03-21 18:37:37
|
Bugs item #2974184, was opened at 2010-03-21 21:37 Message generated for change (Tracker Item Submitted) made by b-s-a You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=102435&aid=2974184&group_id=2435 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: mingw runtime Group: None Status: Open Resolution: None Priority: 5 Private: No Submitted By: b-s-a (b-s-a) Assigned to: Nobody/Anonymous (nobody) Summary: MinGW setlocale behavior differs from MSVC Initial Comment: Standard way to use russian messages in Windows console programs is: setlocale(LC_ALL, "") or setlocale(LC_ALL, "Russian"). These operation cause runtime convertion of all ANSI or UNICODE messages to console code page (Russian console code page is 866, and ANSI - 1251) for output, and in reverse order for input (I am not sure, but it logically should be). But executables compiled by mingw 4.4.0 does not convert messages to 866. Moreover unicode messages looks like ANSI in 866 codepage (i.e. it converts unicode to 1251 before output). I think, that is input is not works well, because currently it works with broken output without problem. I test it on both stdio and iostream libraries. Using built-in specs. Target: mingw32 Configured with: ../gcc-4.4.0/configure --enable-languages=c,ada,c++,fortran,jav a,objc,obj-c++ --disable-sjlj-exceptions --enable-shared --enable-libgcj --enabl e-libgomp --with-dwarf2 --disable-win32-registry --enable-libstdcxx-debug --enab le-version-specific-runtime-libs --prefix=/mingw --with-gmp=/mingw/src/gmp/root --with-mpfr=/mingw/src/mpfr/root --build=mingw32 Thread model: win32 gcc version 4.4.0 (GCC) ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=102435&aid=2974184&group_id=2435 |
From: SourceForge.net <no...@so...> - 2010-03-29 13:43:31
|
Bugs item #2974184, was opened at 2010-03-21 18:37 Message generated for change (Comment added) made by keithmarshall You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=102435&aid=2974184&group_id=2435 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: mingw runtime Group: None >Status: Pending Resolution: None Priority: 5 Private: No Submitted By: b-s-a (b-s-a) Assigned to: Nobody/Anonymous (nobody) Summary: MinGW setlocale behavior differs from MSVC Initial Comment: Standard way to use russian messages in Windows console programs is: setlocale(LC_ALL, "") or setlocale(LC_ALL, "Russian"). These operation cause runtime convertion of all ANSI or UNICODE messages to console code page (Russian console code page is 866, and ANSI - 1251) for output, and in reverse order for input (I am not sure, but it logically should be). But executables compiled by mingw 4.4.0 does not convert messages to 866. Moreover unicode messages looks like ANSI in 866 codepage (i.e. it converts unicode to 1251 before output). I think, that is input is not works well, because currently it works with broken output without problem. I test it on both stdio and iostream libraries. Using built-in specs. Target: mingw32 Configured with: ../gcc-4.4.0/configure --enable-languages=c,ada,c++,fortran,jav a,objc,obj-c++ --disable-sjlj-exceptions --enable-shared --enable-libgcj --enabl e-libgomp --with-dwarf2 --disable-win32-registry --enable-libstdcxx-debug --enab le-version-specific-runtime-libs --prefix=/mingw --with-gmp=/mingw/src/gmp/root --with-mpfr=/mingw/src/mpfr/root --build=mingw32 Thread model: win32 gcc version 4.4.0 (GCC) ---------------------------------------------------------------------- >Comment By: Keith Marshall (keithmarshall) Date: 2010-03-29 13:43 Message: Sorry, but I just don't see *how* the behaviour of MinGW's setlocale() *can* differ from MSVC's. MinGW doesn't provide any implementation of setlocale(), so when your code calls it, you get *Microsoft's* own implementation, in the host system's standard runtime library, MSVCRT.DLL; any difference you see would appear to result either from an error in your own code, or from a change in functionality between versions of Microsoft's implementation. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=102435&aid=2974184&group_id=2435 |
From: SourceForge.net <no...@so...> - 2010-03-29 15:03:17
|
Bugs item #2974184, was opened at 2010-03-21 21:37 Message generated for change (Settings changed) made by b-s-a You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=102435&aid=2974184&group_id=2435 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: mingw runtime Group: None >Status: Open Resolution: None Priority: 5 Private: No Submitted By: b-s-a (b-s-a) Assigned to: Nobody/Anonymous (nobody) Summary: MinGW setlocale behavior differs from MSVC Initial Comment: Standard way to use russian messages in Windows console programs is: setlocale(LC_ALL, "") or setlocale(LC_ALL, "Russian"). These operation cause runtime convertion of all ANSI or UNICODE messages to console code page (Russian console code page is 866, and ANSI - 1251) for output, and in reverse order for input (I am not sure, but it logically should be). But executables compiled by mingw 4.4.0 does not convert messages to 866. Moreover unicode messages looks like ANSI in 866 codepage (i.e. it converts unicode to 1251 before output). I think, that is input is not works well, because currently it works with broken output without problem. I test it on both stdio and iostream libraries. Using built-in specs. Target: mingw32 Configured with: ../gcc-4.4.0/configure --enable-languages=c,ada,c++,fortran,jav a,objc,obj-c++ --disable-sjlj-exceptions --enable-shared --enable-libgcj --enabl e-libgomp --with-dwarf2 --disable-win32-registry --enable-libstdcxx-debug --enab le-version-specific-runtime-libs --prefix=/mingw --with-gmp=/mingw/src/gmp/root --with-mpfr=/mingw/src/mpfr/root --build=mingw32 Thread model: win32 gcc version 4.4.0 (GCC) ---------------------------------------------------------------------- >Comment By: b-s-a (b-s-a) Date: 2010-03-29 19:03 Message: Simple test (code in Windows-1251): #include <iostream> #include <clocale> #include <cstdio> int main() { std::setlocale(LC_ALL, "Russian"); std::cout << "Привет мир!" << std::endl; std::printf("Использование printf %s\n", "и параметра"); return 0; } output of executable produces by cl version 15.00.30729.01: > cl /EHsc aaa.cpp > aaa.exe Привет мир! Использование printf и параметра output of executable produces by g++ version 3.4.5: > g++ aaa.cpp > a ╧ЁштхЄ ьшЁ! ╚ёяюы№чютрэшх printf ш ярЁрьхЄЁр Console used same for both tests (default encoding 866). ---------------------------------------------------------------------- Comment By: Keith Marshall (keithmarshall) Date: 2010-03-29 17:43 Message: Sorry, but I just don't see *how* the behaviour of MinGW's setlocale() *can* differ from MSVC's. MinGW doesn't provide any implementation of setlocale(), so when your code calls it, you get *Microsoft's* own implementation, in the host system's standard runtime library, MSVCRT.DLL; any difference you see would appear to result either from an error in your own code, or from a change in functionality between versions of Microsoft's implementation. ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=102435&aid=2974184&group_id=2435 |