В моем окне Windows команда locale
выводит следующее:
LANG=ru_RU
LC_CTYPE="ru_RU"
LC_NUMERIC="ru_RU"
LC_TIME="ru_RU"
LC_COLLATE="ru_RU"
LC_MONETARY="ru_RU"
LC_MESSAGES="ru_RU"
LC_ALL=
Это прекрасно, за исключением того, что "no charset" в выводе локали означает "ISO charset", то есть ISO-8859-5
для России и России и никогда не использовался (исторически DOS использовал CP866
, Windows использовал CP1251
кодовый код ANSI, и различные Unices придерживались KOI8-R
до появления эры Unicode).
Вышеуказанное согласуется с выводом locale charmap
, который снова соответствует ISO-8859-5
.
Краткий пример C также подтверждает, что используется ISO-8859-5
:
#include <stdio.h>
#include <locale.h>
#include <langinfo.h>
int main() {
const char *locale = setlocale(LC_ALL, "");
const char *codeset = nl_langinfo(CODESET);
printf("locale: %s\n", locale);
printf("codeset: %s\n", codeset);
return 0;
}
выходы
locale: ru_RU/ru_RU/ru_RU/ru_RU/ru_RU/C
codeset: ISO-8859-5
Документы Cygwin утверждают, что
Начиная с Cygwin 1.7.2, набор символов по умолчанию определяется кодовой страницей Windows ANSI по умолчанию для этого языка и территории.
что совершенно неправильно (кодовая страница Windows ANSI - CP1251
!). Удивительно, но для белорусского (восточнославянский язык очень близок к русскому) be_BY
локаль по умолчанию действительно CP1251
что соответствует как документации, так и здравому смыслу.
Это ошибка в Cygwin, или я что-то здесь упускаю?