Na minha caixa do Windows, o comando locale
gera o seguinte:
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=
Isto está perfeitamente bem, exceto que "no charset" na saída do idioma significa "conjunto de caracteres ISO", que é ISO-8859-5
para russo / Rússia e nunca foi usado (historicamente, o DOS usava CP866
, Windows usado CP1251
ANSI codepade e vários Unices aderiram a KOI8-R
antes do surgimento da era Unicode).
O acima é consistente com locale charmap
output, que é novamente ISO-8859-5
.
Exemplo C curto também confirma ISO-8859-5
é usado:
#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;
}
saídas
locale: ru_RU/ru_RU/ru_RU/ru_RU/ru_RU/C
codeset: ISO-8859-5
O Cygwin declara que
Starting with Cygwin 1.7.2, the default character set is determined by the default Windows ANSI codepage for this language and territory.
que está totalmente errado (a página de códigos ANSI do Windows é CP1251
!). Surpreendentemente, para o bielorrusso (idioma eslavo oriental muito próximo do russo) be_BY
locale o charset padrão é de fato CP1251
, o que está de acordo tanto com a documentação quanto com o senso comum.
Isso é um bug no Cygwin, ou estou faltando alguma coisa aqui?
Tags cygwin