Localidade do Cygwin para russo / Rússia

1

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?

    
por Bass 03.11.2015 / 11:51

0 respostas

Tags