#91
|
|||
|
|||
В консольном режиме Linux даже при выборе кодировки UTF-8 вместо ки
Nil A написал(а) к Vladimir Fyodorov в Mar 24 17:39:22 по местному времени:
Нello, Vladimir! Wednesday March 13 2024 08:51, from Vladimir Fyodorov -> Vitaliy Aksyonov: VF> В досовском голдеде у меня, кстати, тоже XLATLOCALSET не указан, и при VF> этом проверка работала. Правда, давно это было, и голдед там VF> десятилетней давности, но думаю, что если обновить, ничего не VF> изменится. В ДОСе через int21h DOS Fn 6501Н: Get Extended Country Information http://www.techhelpmanual.com/544-do...formation.html const char *get_charset(void) { #if defined(_DJGPP_) int segment, selector; _dpmiregs regs; strcpy(charsetbuf, GOLDEDDEFAULTCНARSET); if ((segment = _dpmi_allocate_dosmemory(3, &selector)) != -1) { regs.h.ah = 0x65; regs.h.al = 0x01; regs.x.bx = 0xffff; regs.x.dx = 0xffff; regs.x.cx = 41; regs.x.es = segment; regs.x.di = 0; _dpmiint(0x21, ®s); if (!(regs.x.flags & 1) and (regs.x.cx == 41)) { int CCP = _farpeekw(selector, 5); sprintf(charsetbuf, "CP%i", CCP); } _dpmi_free_dosmemory(selector); } Best Regards, Nil --- GoldED+/LNX 1.1.5 |
#92
|
|||
|
|||
В консольном режиме Linux даже при выборе кодировки UTF-8 вместо ки
Nil A написал(а) к Stas Mishchenkov в Mar 24 17:43:56 по местному времени:
Нello, Stas! Wednesday March 13 2024 16:14, from Stas Mishchenkov -> Vitaliy Aksyonov: VA>> Интересно, как он определяет локальную кодировку на венде. :) SM> Боюсь, что там хардкодед SM> if ( $OS = Linux ) { $charset = KOI8-R} SM> if ( $OS = Windows ) { $charset = CP-866} SM> Судя по поведению. Очень короткий файлик goldlib/gall/gcharset.cpp В ДОСе через int21h В Венде через GetOEMCP() В Юниксах из $LANG, и я там починил недавно, но всё равно тупо выдаёт /ru_RU/ -> CP866 иначе CP437. Best Regards, Nil --- GoldED+/LNX 1.1.5 |
#93
|
|||
|
|||
Re: В консольном режиме Linux даже при выборе кодировки UTF-8 вместо ки
Vitaliy Aksyonov написал(а) к Nil A в Mar 24 14:25:18 по местному времени:
Привет, Nil! 13 Mar 24 17:43, ты писал(а) Stas Mishchenkov: VA>>> Интересно, как он определяет локальную кодировку на венде. :) SM>> Боюсь, что там хардкодед SM>> if ( $OS = Linux ) { $charset = KOI8-R} SM>> if ( $OS = Windows ) { $charset = CP-866} SM>> Судя по поведению. NA> Очень короткий файлик goldlib/gall/gcharset.cpp NA> В ДОСе через int21h NA> В Венде через GetOEMCP() NA> В Юниксах из $LANG, и я там починил недавно, но всё равно тупо выдаёт NA> /ru_RU/ -> CP866 иначе CP437. Надо чтобы он брал из setlocale(LC_что-то, NULL). И это будет работать везде, где есть setlocale. А есть оно почти везде. Best regards, Vitaliy Aksyonov. ... Если вы проснулись на улице - значит вы там заснули! --- GoldED+/LNX 1.1.5-b20240305-beta |
#94
|
|||
|
|||
test cp1251
Konstantin Simonov написал(а) к Stas Mishchenkov в Mar 24 09:04:00 по местному времени:
Нi, Stas! Wednesday March 13 2024 17:12, Stas Mishchenkov (2:460/5858) => Konstantin Simonov: KS>> Чаще надо взять не все сообщение, а небольшой фрагмент. KS>> Например, Б═╙╝╘. SM> И у тебя получилась двойная перекодировка, т.е. пример, как не нужно SM> делать. ;) Я с самого начала об этом. Непонятный фрагмент берется в FAR и там подбирается нужная кодировка, когда сразу не очевидно. Если все в одной кодировке, то проблем нет. Sincerely yours, Konstantin. --- GoldED+/W32-MINGW 1.1.5-b20240306 WinNT 6.2.9200 iP-III |
#95
|
|||
|
|||
Re: test cp1251
Vitaliy Aksyonov написал(а) к Konstantin Simonov в Mar 24 22:51:40 по местному времени:
Привет, Konstantin! 14 Mar 24 09:04, ты писал(а) Stas Mishchenkov: KS>>> Чаще надо взять не все сообщение, а небольшой фрагмент. KS>>> Например, Б═╙╝╘. SM>> И у тебя получилась двойная перекодировка, т.е. пример, как не SM>> нужно делать. ;) KS> Я с самого начала об этом. Непонятный фрагмент берется в FAR и там KS> подбирается нужная кодировка, когда сразу не очевидно. А вот не сработает, если текст перекодирован дважды. Помню была такая программа "Штирлиц", которая такие вещи подбирала. KS> Если все в одной кодировке, то проблем нет. https://xkcd.com/927/ Так не выйдет. Best regards, Vitaliy Aksyonov. ... Гласность это правда, умноженная на безнаказанность. --- GoldED+/LNX 1.1.5-b20240305-beta |
#96
|
|||
|
|||
В консольном режиме Linux даже при выборе кодировки UTF-8 вместо ки
Stas Mishchenkov написал(а) к Nil A в Mar 24 10:14:28 по местному времени:
Нi Nil! 13 Mar 24 17:43, Nil A -> Stas Mishchenkov: SM>> Боюсь, что там хардкодед SM>> if ( $OS = Linux ) { $charset = KOI8-R} SM>> if ( $OS = Windows ) { $charset = CP-866} SM>> Судя по поведению. NA> Очень короткий файлик goldlib/gall/gcharset.cpp NA> В ДОСе через int21h NA> В Венде через GetOEMCP() Ага. И тут получает правильный ответ. NA> В Юниксах из $LANG, и я там починил недавно, но всё равно тупо выдаёт NA> /ru_RU/ -> CP866 иначе CP437. А тут в чём проблема получить верный ответ? [fido@brorabbit ~]$ echo $LANG ru_RU.IBM866 [ustasm@brorabbit ~]$ echo $LANG ru_RU.UTF-8 Нave nice nights. Stas Mishchenkov. --- Ты не нищий, ты просто отрицательно богатый. |
#97
|
|||
|
|||
В консольном режиме Linux даже при выборе кодировки UTF-8 вместо ки
Stas Mishchenkov написал(а) к Vitaliy Aksyonov в Mar 24 13:12:16 по местному времени:
Нi Vitaliy! 13 Mar 24 14:25, Vitaliy Aksyonov -> Nil A: VA>>>> Интересно, как он определяет локальную кодировку на венде. :) [...skipped...] VA> Надо чтобы он брал из setlocale(LC_что-то, NULL). И это будет работать VA> везде, где есть setlocale. А есть оно почти везде. $locale = setlocale(LC_CTYPE); === Import Windows Clipboard Start === [fido@brorabbit tests]$ cat ./1_locale.pl #!/usr/bin/perl use POSIX qw(locale_h); use locale; my $old_locale; $oldlocale = setlocale(LCCTYPE); print "$old_locale\n"; === Import Windows Clipboard End === [fido@brorabbit tests]$ ./1_locale.pl ru_RU.IBM866 D:\Fido\inbound>1_locale.pl C Не работает. Нave nice nights. Stas Mishchenkov. --- Вообще-то, волка голова кормит. А ноги, это так - удачный гаджет. |
#98
|
|||
|
|||
test cp1251
Stas Mishchenkov написал(а) к Vitaliy Aksyonov в Mar 24 13:20:34 по местному времени:
Нi Vitaliy! 13 Mar 24 22:51, Vitaliy Aksyonov -> Konstantin Simonov: KS>>>> Чаще надо взять не все сообщение, а небольшой фрагмент. KS>>>> Например, Б═╙╝╘. SM>>> И у тебя получилась двойная перекодировка, т.е. пример, как не SM>>> нужно делать. ;) KS>> Я с самого начала об этом. Непонятный фрагмент берется в FAR и там KS>> подбирается нужная кодировка, когда сразу не очевидно. VA> А вот не сработает, если текст перекодирован дважды. Помню была такая VA> программа "Штирлиц", которая такие вещи подбирала. Я с первого раза угадал, но это опыт. Раньше такой фигни в эхах достаточно было, что бы научиться на глаз узнавать. Нave nice nights. Stas Mishchenkov. --- Запомни, люди не меняются, ты их просто лучше узнаёшь. |
#99
|
|||
|
|||
Re: В консольном режиме Linux даже при выборе кодировки UTF-8 вместо ки
Vitaliy Aksyonov написал(а) к Stas Mishchenkov в Mar 24 07:16:24 по местному времени:
Привет, Stas! 14 Mar 24 10:14, ты писал(а) Nil A: SM>>> Боюсь, что там хардкодед SM>>> if ( $OS = Linux ) { $charset = KOI8-R} SM>>> if ( $OS = Windows ) { $charset = CP-866} SM>>> Судя по поведению. NA>> Очень короткий файлик goldlib/gall/gcharset.cpp NA>> В ДОСе через int21h NA>> В Венде через GetOEMCP() SM> Ага. И тут получает правильный ответ. NA>> В Юниксах из $LANG, и я там починил недавно, но всё равно тупо NA>> выдаёт /ru_RU/ -> CP866 иначе CP437. SM> А тут в чём проблема получить верный ответ? SM> [fido@brorabbit ~]$ echo $LANG SM> ru_RU.IBM866 SM> [ustasm@brorabbit ~]$ echo $LANG SM> ru_RU.UTF-8 Проблема в том, что например этой переменной может не быть, а локаль есть. Да и в разных системах реализовано по-разному. А setlocale работает одинаково. Best regards, Vitaliy Aksyonov. ... Всех денег не заработать - часть придется украсть... --- GoldED+/LNX 1.1.5-b20240305-beta |
#100
|
|||
|
|||
Re: В консольном режиме Linux даже при выборе кодировки UTF-8 вместо ки
Vitaliy Aksyonov написал(а) к Stas Mishchenkov в Mar 24 07:17:20 по местному времени:
Привет, Stas! 14 Mar 24 13:12, ты писал(а) мне: VA>>>>> Интересно, как он определяет локальную кодировку на венде. :) SM> [...skipped...] VA>> Надо чтобы он брал из setlocale(LC_что-то, NULL). И это будет VA>> работать везде, где есть setlocale. А есть оно почти везде. SM> $locale = setlocale(LC_CTYPE); SM> === Import Windows Clipboard Start === SM> [fido@brorabbit tests]$ cat ./1_locale.pl SM> #!/usr/bin/perl SM> use POSIX qw(locale_h); SM> use locale; SM> my $old_locale; SM> $oldlocale = setlocale(LCCTYPE); SM> print "$old_locale\n"; SM> === Import Windows Clipboard End === SM> [fido@brorabbit tests]$ ./1_locale.pl SM> ru_RU.IBM866 SM> D:\Fido\inbound>1_locale.pl C SM> Не работает. Ты неправильно её готовишь. Я тоже на это наступил. Надо внимательнее читать документацию. :) Попробуй так: setlocale(LC_CTYPE, ""); В твоём варианте оно возвращает текущую для процесса. А так, как она ранее не была выставлена, то и возвращает C. Мой вариант как раз выставляет локаль используя LANG и другие переменные и возвращает тебе то, что наделал. Best regards, Vitaliy Aksyonov. ... Приехала: пальцы веером, сопли пузырями!... --- GoldED+/LNX 1.1.5-b20240305-beta |