Страница 1 из 2

Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 07.05.2021 20:12:58
Сквозняк
Интересуют не шрифты, а сами кодировки. То есть, если выводимый в консоль текст отобразится неправильно, но сами байты не пострадают, это нормально. Это важно для правильного использования путей содержащих неанглийские буквы. С отсутствием в системе русского шрифта можно смириться - если кто-то не прочитает системную надпись, то и хрен с ним, а вот если программа не найдёт свои файлы и не сможет создать каталог из-за порчи виндой системной команды, это уже фатальный баг программы.
Сейчас работоспособность навигации по каталогам работает через
Код: Выделить всё
setconsolecp(866);

Но не превратится ли это в тыкву на бразильской, японской или ещё какой семёрке или десятке?

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 08.05.2021 05:39:23
Vadim
По идее, все буковки хранятся в виде их кодов, а код - это цифра. И вряд ли весёлые и плутоватые бразильянцы станут отказываться от применения цифр на своём компе... :-)

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 08.05.2021 11:36:43
SSerge
Сквозняк писал(а):Но не превратится ли это в тыкву на бразильской, японской или ещё какой семёрке или десятке?


возможно, что и превратится.
В качестве примера, я полагаю, можно попробовать выполнить setconsolecp для какой-нибудь германской, итальянской или французской кодовой страницы - внимание! - не устанавливая поддержку языка в ОС, и посмотреть, что из этого выйдет.
Заодно, есть занимательная разница в том, как имена файлов хранятся в NTFS и FAT32. Вот с FAT все должно быть очень нехорошо в ОС других национальностей.

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 08.05.2021 16:10:40
Сквозняк
Vadim писал(а):По идее, все буковки хранятся в виде их кодов, а код - это цифра. И вряд ли весёлые и плутоватые бразильянцы станут отказываться от применения цифр на своём компе... :-)

Это в линуксе можно похохатывать над вопросом, а в винде системные команды принудительно во что-то перекодируются и нужной таблицы перекодировки на компе может и не быть. Таблица сожрёт несколько килобайт дискового пространства, это вроде немного, но "умники" в любой момент могут увязать наличие таблицы для восьмибитной кодировки в один пакет со шрифтами и переводами интерфейса, а это уже боль, языковые пакеты много весят.

Добавлено спустя 26 минут 32 секунды:
SSerge писал(а):
Сквозняк писал(а):Но не превратится ли это в тыкву на бразильской, японской или ещё какой семёрке или десятке?


возможно, что и превратится.
В качестве примера, я полагаю, можно попробовать выполнить setconsolecp для какой-нибудь германской, итальянской или французской кодовой страницы - внимание! - не устанавливая поддержку языка в ОС, и посмотреть, что из этого выйдет.
Заодно, есть занимательная разница в том, как имена файлов хранятся в NTFS и FAT32. Вот с FAT все должно быть очень нехорошо в ОС других национальностей.

Самое лучшее это установить несколько мумбоюмбовских десяток в виртуалку и протестировать перемещение в каталог на мумбоюмбовском языке и обратно. А для начала проверить в консоли команду
Код: Выделить всё
chcp 866


Список имеющихся кодировок получается таким батником, но это не точно:
Код: Выделить всё
@echo off
echo start TimeStamp %time%>>code.txt
setlocal enabledelayedexpansion
for /l %%i in (1,1,65001) do (
    >nul 2>&1 chcp %%i
    set x=!errorlevel!
    if !x!==0 (>>code.txt echo %%i)
)
echo finish TimeStamp %time%>>code.txt
pause


Десятка в виртуалке работает в режиме слайдшоу, если железо не тянет. Потому наверно буду качать и пробовать на ноуте, чтобы комп не занимать, там же и флешку виндовой программой портить надо, а в ноуте суперскорость при сложных вычислениях. Надеюсь недели хватит чтобы протестить японскую, бразильскую и буржуйскую десятки. Ну а может и две уйдёт. Придумали в мелкософте развлечение.

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 08.05.2021 21:04:19
Снег Север
Сколько у линуксойдов проблем на пустом месте из-за порочной привычки выводить текст в консоль, а не во временный файл! :shock:

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 08.05.2021 21:21:40
Сквозняк
А как ты в маздайке потом найдёшь этот файл, если в путях окажутся неанглийские буквы и она команды программы неправильно перекодирует? Да даже каталог создать в путях с неанглийскими буквами, считанных из системной переменной, это уже достижение. Читаешь путь, с точности до байта по нему пытаешься прыгнуть, винда путь прыжка перекодирует и хрясь - заданный путь не существует. В линуксе таких чудес не замечал, это виндовое ноу-хау. Причём, если установить правильную кодировку в консоль, то нормализуется перекодирование системных команд программы идущих и без консоли. После такой гадости нет ничего удивительного, что некоторые утилиты написанные для икспишки нормально не работают в семёрке - в ней или висте как раз появились эти "чудеса" с кодировками.

В русифицированной семёрке и десятке эту гадость поборол, теперь нужно предпринять титанический мартышкин труд чтобы проверить в нескольких не русских.

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 09.05.2021 04:35:19
SSerge
Сквозняк писал(а):Список имеющихся кодировок получается таким батником


ммм. А как же EnumSystemCodePages и IsValidCodePage?

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 09.05.2021 08:24:13
Снег Север
Бедные, бедные малограмотные линуксойды... Они до сих пор не ведают, что еще со времен Windows XP существует системная функция GetShortPathNameW, с которой про все проблемы с кодировками можно забыть раз и навсегда... :roll:

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 09.05.2021 09:33:39
Seenkao
Снег Север писал(а):до сих пор не ведают, что еще со времен Windows XP существует системная функция GetShortPathNameW
Загуглил? Она ещё со времён 95-й версии, если не раньше. Ты забыл рассказать, как ей пользоваться.

Сквозняк, Вадим правильно написал, что все символы - это просто коды. Используй низкоуровневые функции и определяй сам, какая кодировка у тебя. В противном случае, надо указывать, с какой кодировкой работаешь и уточнять, будут ли системные вызовы работать с этой кодировкой (не изменят ли её).

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 09.05.2021 11:41:50
Снег Север
Seenkao писал(а): Она ещё со времён 95-й версии, если не раньше. Ты забыл рассказать, как ей пользоваться.

Для сведения малограмотных линуксойдов - нет, не с 95-й, а как я написал - с Windows XP. А для тех, кого забанили в MSDN - стандартная фрипаскалевская обертка:
https://www.freepascal.org/docs-html/rt ... hname.html

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 09.05.2021 13:06:28
Seenkao
Снег Север писал(а):нет, не с 95-й, а как я написал - с Windows XP.

Ну да... это же я дурак, и от этого ни куда не убежать.

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 09.05.2021 14:52:15
Сквозняк
Снег Север писал(а):Бедные, бедные малограмотные линуксойды... Они до сих пор не ведают, что еще со времен Windows XP существует системная функция GetShortPathNameW, с которой про все проблемы с кодировками можно забыть раз и навсегда... :roll:


Ты прямо как тот мужик из анекдота, который орал в лесу "помогите", к нему пришёл медведь и спросил "зачем орёшь", тот ответил "а вдруг кто услышит" - "ну я услышал, легче стало?" Толку от получения данных от винды, если при их применении случится рандомная неведомая лажа и чтобы её избежать всё равно придётся выкручиваться. Сам принцип перекодирования команд без спроса - порочный и порождает проблемы на ровном месте.

Добавлено спустя 4 минуты 45 секунд:
SSerge писал(а):ммм. А как же EnumSystemCodePages и IsValidCodePage?

Можно и так и сяк получать данные, просто батник я прихватизировал из интернета готовый. В вайне он точно нормально не работает :D В той консоли скриптовой язык не на 100% соответствует виндовому. Программа на паскале же будет работать и там и там.

Добавлено спустя 7 минут 48 секунд:
Seenkao писал(а):Сквозняк, Вадим правильно написал, что все символы - это просто коды. Используй низкоуровневые функции и определяй сам, какая кодировка у тебя. В противном случае, надо указывать, с какой кодировкой работаешь и уточнять, будут ли системные вызовы работать с этой кодировкой (не изменят ли её).


Да весь вопрос в том, что надо произвести мартышкин труд с установкой виртуальных машин с не самой дружелюбной начинкой. Как потянет их железо, тот ещё вопрос. Вот и закинул удочку, вдруг у кого уже есть готовая виртуалка для тестирования. Но похоже винда на этом форуме настолько популярна, что кроме используемой, никакая больше не имеется. Вчера накачал маздаек, на новой неделе буду кидать их на флешку и насиловать ноут.

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 09.05.2021 15:38:49
Снег Север
Сквозняк писал(а):Толку от получения данных от винды, если при их применении случится рандомная неведомая лажа

Существует в природе хоть один случай "рандомной неведомой лажи" или как всегда - фантазии линуксойдов? Я за двадцать лет не встречал ни разу "рандомной неведомой лажи" в винде, а вот программистов с кривыми руками, сетовавших на "лажу" - много раз...

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 09.05.2021 15:56:11
Seenkao
Сквозняк писал(а):Но похоже винда на этом форуме настолько популярна, что кроме используемой, никакая больше не имеется.
Тут большинство сидят на ней, и лишь те, кто плотно сидит на разработке, имеют полный перечень систем установленных у них или используемых на виртуалке (кстати, может винду на виртуалку загнать? Дак опять линукс не хочет нормально видеокарту определять...).

Не там ты это спрашиваешь. Больше тебе ответят на английском форуме, а ещё больше там, где конкретно линуксом занимаются (вероятно тоже какой-нибудь англоязычный форум). Здесь, больше по самому паскалю, FPC и Lazarus задавать вопросы (видимо) надо. Но бывает кто-то что-то знает! Не раз помогали! :D

Re: Есть ли кодировка IBM866 в забугорных win консолях?

СообщениеДобавлено: 09.05.2021 16:11:19
Сквозняк
Снег Север писал(а):Существует в природе хоть один случай "рандомной неведомой лажи" или как всегда - фантазии линуксойдов?

Как всегда - звиздёжь виндузятников отрицающих баги, которые ловятся по итогам тестирования. Как бы выйди в яндекс и почитай какие замечательные баги регулярно присылают в обновления десятки.

Снег Север писал(а):Я за двадцать лет не встречал ни разу "рандомной неведомой лажи" в винде,

За что сидел? :mrgreen:

Добавлено спустя 5 минут 30 секунд:
Seenkao писал(а):Не там ты это спрашиваешь.


Там, в сраче познаётся истина! Рецепт "отруби интернет и поставь десятку в виртуалку" как бы есть, а лучшего и там скорее всего не посоветуют, скорее даже не поймут, как это десятка в виртуалке может злостно тормозить :P