RU.GOLDED---------------- < Пред. | След. > -- < @ > -- < Сообщ. > -- < Эхи > --
 Nп/п : 55 из 100
 От   : Vitaliy Aksyonov                    1:104/117         15 мар 24 19:23:06
 К    : Stas Mishchenkov                                      15 мар 24 04:38:02
 Тема : Re: В консольном режиме Linux даже при выборе кодировки UTF-8 вместо ки
----------------------------------------------------------------------------------
                                                                                 
@MSGID: 1:104/117 65f4f7c1
@REPLY: 2:460/5858 65f47128
@CHRS: CP866 2
@TZUTC: -0600
@TID: hpt/lnx 1.9 2022-07-03
Привет, Stas!

15 Mar 24 18:51, ты писал(а) мне:

 SM>>> setlocale(LC_CTYPE, "");
 SM>>> # LC_CTYPE now reset to the default defined by the
 SM>>> # LC_ALL/LC_CTYPE/LANG environment variables, or to the system
 SM>>> # default.

 VA>> Это именно то, что надо. Когда вызываешь setlocale(LC_CTYPE,
 VA>> NULL), то оно возвращает ранее выставленную локаль. А так, как ты
 VA>> её явно не выставлял, то и возвращается "C".

 SM> А GoldEd как-то иначе делает?

 Они использует именно setlocale(LC_CTYPE, ""); И в некоторых местах
LC_ALL. Но это неважно.

 VA>>>> Попробуй так: setlocale(LC_CTYPE, "");
 SM>>> Та же фигня, только в левой руке.

 Может это прикол перла? Попробуй накропать простенькую программу на
голом си и посмотри, что выдаст.

-------------
#include 
#include 

int main()
{
  printf("%s", setlocale(LC_ALL, "");
  return 0;
}

Что скажет? :)

 VA>> Этот вариант как раз меняет локаль с "C" на то, что настроено в
 VA>> системе. Почему оно у тебя возвращает "C", это вопрос.
 SM> Пробовал заслать \0 - ваще тишину возвращает.

Венда, она вообще странная.

 VA>> Я не перлом пробовал правда, но не думаю, что есть какая-то
 VA>> разница, ведь перл тупо вызывает ту же системную функцию.

 SM> Вот именно. Тот же POSIX locale_h. Запустил для чистоты эксперимента
 SM> голый cmd.exe. Вот результат:

 SM> Microsoft Windows [Version 10.0.19045.4170]
 SM> (c) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.

 SM> D:\\Fido\\inbound>1_locale.pl
 SM> C
 SM> C

У меня программа на c выдаёт English_United States.1251

 SM> D:\\Fido\\inbound>chcp
 SM> Текущая кодовая страница: 866

Самое интересное, что даже после chcp 866 выдаёт ту же английскую локаль.

 VA>>>> В твоём варианте оно возвращает текущую для процесса. А так,
 VA>>>> как она ранее не была выставлена, то и возвращает C. Мой
 VA>>>> вариант как раз выставляет локаль используя LANG и другие
 VA>>>> переменные и возвращает тебе то, что наделал.

 SM>>> Судя по доке, пустая строка должна вызвать ресет локали на
 SM>>> дефаулт.

 VA>> Именно. А он берется из тех же $LANG и так далее.

 SM> Видимо, виндовс уже не такая уж и позикс совместимая.

Она никогда и не была POSIX совместимой.

 SM>>> Да, это я проверял для

 SM>>> D:\\Fido\\inbound>ver Microsoft Windows [Version 10.0.19045.4170]

 SM>>> В семёрке оно, кажется, работало иначе.

 VA>> Да одинаково оно работает. Просто в венде локаль странная.

 SM> Я про то самое. Там так не получится.

 VA>> Пробовал тот же скрипт ради интереса под линуксом запустить? Что
 VA>> кажет?

 SM> Да. Всё правильно кажет. Я уже здесь писал.

Ну хоть там по-человечески.

 SM> [fido@brorabbit tests]$ ./1_locale.pl
 SM> ru_RU.IBM866

 SM> [ustasm@brorabbit ~]$ /home/fido/perl/tests/1_locale.pl
 SM> ru_RU.UTF-8

 Я тут накопал, почему когда локаль "неправильная" спеллчекер не
срабатывает. В смысле, пропускает русские слова. Из-за того, как там строка на
слова разбивается. Словом считается то, что состоит из букв, цифр и
символов "-`."

Причём определяется что символ - это буква вот таким мега алгоритмом:
====
int isxalnum(int c)
{
    return isascii(c) ? isalnum(c) : (c != g_tolower(c)) || (c != g_toupper(c));
}
====

to_lower/to_upper не будут работать корректно для русских букв в "чужой" локали.

 Вот и получается, что словарь загружен, но русские слова в него не
попадают. И дед просто их все считает правильнымию

 В целом алгоритм имеет право на жизнь, но мне кажется, проще было
бы просто разрезать текст по пробелам/табам.

Best regards,
Vitaliy Aksyonov.

... Экипаж прощается с вами, желает вам счастливого полета.
--- GoldED+/LNX 1.1.5-b20240305-beta
 * Origin: Aurora, Colorado (1:104/117)
SEEN-BY: 46/49 50/109 104/117 221/6 240/1120 250/25
301/1 341/66 451/31
SEEN-BY: 452/28 166 455/19 463/68 467/888 4500/1
5000/111 5001/100 5005/49
SEEN-BY: 5015/42 46 5019/40 400 5020/101 113 545
715 814 830 846 848 1042
SEEN-BY: 5020/2992 4441 5480 8086 12000 5022/128
5029/32 5030/49 115 1081
SEEN-BY: 5030/1474 5036/26 5049/1 3 5050/151
5053/51 58 5054/8 89 5058/104
SEEN-BY: 5060/900 5061/133 5068/45 5083/1 444
6090/1
@PATH: 104/117 5020/1042 4441



   GoldED+ VK   │                                                 │   09:55:30    
                                                                                
В этой области больше нет сообщений.

Остаться здесь
Перейти к списку сообщений
Перейти к списку эх