forum.wfido.ru  

Вернуться   forum.wfido.ru > Прочие эхи > RU.GOLDED

Ответ
 
Опции темы Опции просмотра
  #91  
Старый 13.03.2024, 18:51
Nil A
Guest
 
Сообщений: n/a
По умолчанию В консольном режиме 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, &regs);
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  
Старый 13.03.2024, 18:51
Nil A
Guest
 
Сообщений: n/a
По умолчанию В консольном режиме 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  
Старый 14.03.2024, 00:41
Vitaliy Aksyonov
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 14.03.2024, 06:21
Konstantin Simonov
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 14.03.2024, 09:01
Vitaliy Aksyonov
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 14.03.2024, 12:12
Stas Mishchenkov
Guest
 
Сообщений: n/a
По умолчанию В консольном режиме 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  
Старый 14.03.2024, 14:31
Stas Mishchenkov
Guest
 
Сообщений: n/a
По умолчанию В консольном режиме 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  
Старый 14.03.2024, 14:31
Stas Mishchenkov
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 14.03.2024, 17:31
Vitaliy Aksyonov
Guest
 
Сообщений: n/a
По умолчанию 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  
Старый 14.03.2024, 17:31
Vitaliy Aksyonov
Guest
 
Сообщений: n/a
По умолчанию 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
Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 23:41. Часовой пояс GMT +4.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot