Мохнатые уроды и моральные пёзды. Войти !bnw Сегодня Клубы
В 10-й Винде консоль якобы стала лучше. Я не заметил. По крайней мере она как UTF-8 не поддерживала, так и не поддерживает нормально. Можно сказать ей `chcp 65001`, и тогда можно будет нормально выводить текст в UTF-8. Но ввести его при помощи, например, fgets как раньше нельзя было, так нельзя и сейчас. Что характерно, если взять Cygwin или MinGW, и воспользоваться их `cat.exe`, то умная кошка знает, что имеет дело с долбанутой виндовской консолью, и всё поправляет как надо. Т.е. если запустить `cat | моя_программа.exe`, то в `stdin` уже пойдут строчки вполне себе в UTF-8. Не знаю, м.б. это и не консоль, а стандартная библиотека в исполнении M$ в составе Visual C++. Пофиг. Всё равно разочарован. Когда они наконец это поправят?.. А если я чего-то не понял, то чего именно?..
#9865KY / @dluciv / 3423 дня назад

попробуй chcp 65001 python3 >>> help(help)
#9865KY/NDS / @anonymous / 3423 дня назад
😸
#9865KY/G4E / @ruki / 3423 дня назад
@anonymous Питон и без chcp работает. Он вроде бы просто всё сам перекодирует в свои внутренние хитрожопые представления. Не о Питоне речь.
#9865KY/10B / @dluciv --> #9865KY/NDS / 3423 дня назад
@ruki $ which 😸 /bin/😸
#9865KY/SCB / @dluciv --> #9865KY/G4E / 3423 дня назад
виндовая консоль не поддерживает кавычки, пробелы, циклы и условия
#9865KY/DF6 / @mugiseyebrows / 3423 дня назад
@mugiseyebrows Полегче, бро. Ни одна из известных мне консолей не поддерживает циклов и условий, даже консоль 3270 =).
#9865KY/LKZ / @dluciv --> #9865KY/DF6 / 3423 дня назад
Собственно вот пример из Виндов и Питона: In [1]: import sys In [2]: sys.stdin.encoding Out[2]: 'cp866' Не нужно ему никакое `chcp`, он сам прекрасно знает, что вокруг ДОС...
#9865KY/NSZ / @dluciv / 3423 дня назад
@dluciv ну всмысле шелл, хули ты приебался
#9865KY/XM3 / @mugiseyebrows --> #9865KY/LKZ / 3423 дня назад
@mugiseyebrows Облажался, а сам ругается ещё. Фу.
#9865KY/MQO / @dluciv --> #9865KY/XM3 / 3423 дня назад
@mugiseyebrows Алсо cmd.exe поддерживает многое, только через жопу. А powershell -- тот вообще ПЦ какой умный, только его почти никто живьём не видел, и вообще он какой-то не очень шелл.
#9865KY/MAG / @dluciv --> #9865KY/XM3 / 3423 дня назад
@dluciv Да что ты говоришь. Выполни в винде в питоне3 ```chr(0x2764)``` без chcp 65001 и расскажи, что он тебе высрет в консоль.
#9865KY/34F / @anonymous --> #9865KY/10B / 3423 дня назад
@dluciv т.к. cmd.exe не может в нормальные шрифты, то попробуй лучше chr(0x108) (в lucida console и consolas он есть). c 65001 и дефолтной codepage.
#9865KY/FTD / @anonymous --> #9865KY/10B / 3423 дня назад
@anonymous Ок, ладно, уболтал. Я даже прововать не буду, знаю, что высрет. Кстати интересно, что у stdin при этом кодировка в питоне тоже становится cp65001, и он нормально читает stdin.
#9865KY/Q44 / @dluciv --> #9865KY/34F / 3423 дня назад
@dluciv Из чего я делаю выводы, что stdin из стандартной сишной библиотеки тоже как-то можно накостылять в плане настроек, чтобы он не пакостился, а выдавал, что просят. А как?
#9865KY/JRL / @dluciv --> #9865KY/Q44 / 3423 дня назад
@dluciv Ты тупой или тупой? Я о другом говорил. Если выбрать 65001, то питон узнает, что юникод, ага. И даже будет выводить его. Но при этом работает через жопу. Например, работа функции help(), которую я и привёл. А с 866 страницей юникодные символы отображаются через \uxxxx представление, что очевидно.
#9865KY/AAX / @anonymous --> #9865KY/NSZ / 3423 дня назад
@anonymous уже выше обсудили
#9865KY/AQO / @dluciv --> #9865KY/AAX / 3423 дня назад
@dluciv Похуй, что там обсудили. Блядь, я в первом комменте попросил проверить, что будет с питоном в вин10 (потому что у меня её нет). Но ты начал зачем-то рассказывать, как питоновские кодеки работают.
#9865KY/WLN / @anonymous --> #9865KY/AQO / 3423 дня назад
@dluciv Кстати! В Питоне sys.stdin.readline() и после chcp 65001 не-ASCII не читает. Вот.
#9865KY/RWR / @dluciv --> #9865KY/JRL / 3423 дня назад
@anonymous 1. Будет то же самое, что и не в 10. 2. Ты анонимус, поэтому ты припёрся только сейчас и сразу убежал (навсегда причём), а раньше ничего не просил. Это был какой-то другой другой онанимус.
#9865KY/4Y4 / @dluciv --> #9865KY/WLN / 3423 дня назад
@dluciv поддерживать через жопу === не поддерживать если какая-то технология появилась значительное время назад и её никто не использует значит она говно (рынок порешал)
#9865KY/B3R / @mugiseyebrows --> #9865KY/MAG / 3423 дня назад
@anonymous Это я был, а не ты, не надо говорить неправду.
#9865KY/5HB / @anonymous --> #9865KY/WLN / 3423 дня назад
@dluciv не работает а вообще исправят они свою консоль только в будущем
#9865KY/NKV / @anonymous --> #9865KY/10B / 3423 дня назад
@anonymous Они собирались, или гипотетически?
#9865KY/3VK / @dluciv --> #9865KY/NKV / 3423 дня назад

Никогда они это не поправят, там всё растёт из совместимости с предыдущими системами, а не от продуманной идеи текстового интерфейса программ.

Консоль — это терминал (его эмулятор), оболочка, системный API, утилиты. В десятой версии подтянули терминал, добавив украшательства, сочетания клавиш, работу с буфером, изменение размера на лету и прочее, что давно считается нормой в нормальных ОС (и уже было в альтернативных консольках под винду). Интерпретатор умнее не стал: нет смысла придумывать свой bash, которым никто не будет пользоваться. По той же причине удивительно ожидать, что стандартные утилиты вдруг перепишут, убрав жёсткую привязку к досовской кодировке. Заметим, что у нас операционная система насквозь юникодная (по крайней мере, API), системная локаль соответствует кодовой странице ANSI, а консоль работает в OEM-кодировке, и приложению надо все три варианта иметь в виду при вводе-выводе. "chcp 65001" официально не рекомендован (поскольку UTF-8 в винде не родной формат ни для чего, а это, видимо, хак для представления его в качестве одного из MBCS) и приведёт к глюкам и молчаливым падениям случайных программ (особенно кросплатформенных). Я когда-то давно поковырял это всё и пришёл к выводу, что однозначно рабочего решения не существует: если в юниксовых программах и библиотеках на C можно добиться, чтобы массивы однобайтных символов в качестве базового формата передавались без изменений, а потом объявить эру .utf-8 и заново проверить, что никто не считает, что длина строки в символах равна количеству байт в ней, то тут и программа должна внутренние форматы приводить к wchar_t, а потом ещё консоль как-то будет символы конвертировать, в зависимости от кодировки, шрифта (!) (! даже без вывода на экран, при перенаправлении в файл/из файла (!)).

Можно всё переписать заново, пользуясь только низкоуровневыми функциями, но взаимодействие с другими консольными программами вернёт пробелму на место. Можно использовать POMERSHELL (там ввод-вывод программ насильно превращается в объекты .NET) или другой язык с GUI'шной консолькой и надеяться, что их авторы насчёт кодировок всё предусмотрели. Можно, как cygwin, брать полноценный putty и подключаться к полноценной оболочке в воссозданном полноценном окружении.

#9865KY/Q3Q / @ceyt / 3422 дня назад
@ceyt Исчерпывающе, спасибо =)
#9865KY/5LK / @dluciv --> #9865KY/Q3Q / 3422 дня назад
Надо использовать юникодный api для работы с консолью. В libc от Майкрософт есть обертка, перекодирующая в утф8.
#9865KY/VEQ / @windowsadmin / 3422 дня назад

@romme Два замечания:
— Я бы посмотрел на человека, сознательно пользующегося ANSI-обёрткой к API в 2015 году.
— Конвертировать внутри приложения можно сколько угодно, это автоматизируется, и это всё равно придётся делать, потому что utf-8 винда не понимает.
— Проблема в том, что весь этот правильный юникод в правильных вызовах API нормально отображаться и вводиться не хочет из-за отсутствия родной поддержки в оболочке, библиотеках, фреймворках и прочем: https://alfps.wordpress.com/2011/12/08/unicode-part-2-utf-8-stream-mode/

#9865KY/LKT / @ceyt --> #9865KY/VEQ / 3422 дня назад
Меж тем, Rust делает мудро. Под винды генерит код, который, проверив, что вывод не перенаправили, понимает, что ему придётся иметь дело с долбанутой виндовской консолью, конвертит всё в UTF-16LE и вызывает Read/WriteConsoleW. Аналогичные примочки есть и для Питона: http://stackoverflow.com/a/3259271/539470 Текстом с файлами обменивается в UTF-8. Через какие же задницы надо пролезать, чтобы заставлять программы работать под Виндами...
#9865KY/3CB / @dluciv / 3417 дней назад
ipv6 ready BnW для ведрофона BnW на Реформале Викивач Котятки

Цоперайт © 2010-2016 @stiletto.