Ruby хочет аргументы командной строки в UTF-8. Они там охренели что ли?
Linda-chan, а что не так-то?
Дата рождения: 01.11.1983
Тотальная неудачница и убийца жёстких дисков. Самая большая поклонница Ариэль. Член ордена Вселенского тормоза имени Осаки-сан. Любительница каваййных переднеприводных машинок. Суккуб на полставки. Когти прилагаются.
Ruby хочет аргументы командной строки в UTF-8. Они там охренели что ли?
Linda-chan, а что не так-то?
Linda-chan, UTF-8 какбэ стандарт
Linda-chan, Ну, авторы руби, кагбэ японцы, не? как им еще свою кану вводить, если не через utf-8?
Linda-chan, погоди, нанами шо, не умеет в utf-8?
Linda-chan, посмотрел в теги не нашел теги ретро и бред
Linda-chan, Ты не права
Потому что есть только одна кодировка.
Linda-chan, поставь PowerShell - он юникодный, в отличие от cmd.exe
Linda-chan, просто мс поддерживает всякое старьё
Linda-chan, ОМГ. Топикстартер выбрала инструмент не подходящий для решения задачи в данных ей условиях.
Ей тут понамекали на это. вывод - все идиоты, одна ты такая вся красивая, на красной машинке
ridouchire, будем честны, некоторые cp1251 и cp866 нужны для некоторого специализированного софта который ровесник говну мамонта, а переписывать этот софт никто не будет.
ridouchire, обратная совместимость, обычно старые стандарты выкорчевывают через несколько версий меняя постепенно всякоэ
Linda-chan, Опять-таки, ССЗБ.
Linda-chan, лоооооооооооол кросплатформенность и опенсорс -не неслышали! Признай свою неправоту.
Linda-chan, Алсо, сильно сомневаюсь, что utf-8 захардкожена прямо в программе, скорее проблема в среде исполнения, то есть в интерпритаторе рубей
Linda-chan, нет ты, я нигде не писал про utf-16?
Linda-chan, о чем?
Linda-chan, Ой-вэй, второй раз говорю - бубунту на виртуалку. И будет тебе счасть. Реально, ну нахера жрать кактус?
Linda-chan, я уже запутался. то ты пишешь сайт, то жалуешься на какую-то программу, которая хочет аргументы в utf8.
Linda-chan, переименуй в fail.txt.
Linda-chan, в том что кроссплатформенность предполагает выполнение во всех осях со своими костылями и таргет оси без костылей.
Linda-chan, ты от критики становишься агрессивной, прям как дедфуд
Linda-chan, тогда, что тебе мешает последовать совету?
Linda-chan, а ты не намекай, а прямо скажи, все вы бабы такие, только намеками и можете >_<
Linda-chan, а что мешает? алсо - виртуалка с убунтой. можно даже серверной.
Честно, быстрее будет
Linda-chan, Окай, ты нашла баг, напиши разработчику.
А задачу-то делать надо? вот и ставь убунту в виртуалку
Linda-chan, а, программа Ruby.exe? ну, отлично, я угадал, что это требование рантайма.
Linda-chan, винда умеет в утф8 чо
Linda-chan, тогда, как будешь решать задачу? без костылей-то?
Linda-chan, а руби скомпиленные под NT хотят UTF-8. Ты попала, да
Linda-chan, я ж говорю, про дальсвязь забыл.
Linda-chan, алсо, в твоих терминах - мне доставляют на дом
Версия старая. Почему она старая - я уже писала ранее. Но для тебя сделаю исключение и расскажу. Программа привязана к C++ рантайму, который живёт в системном каталоге Windows переделывается в каждой новой версии Windows. Использовать этот рантайм нельзя. Авторы билда не в курсе.
Linda-chan, Я уже понял, что авторы билда - плохие. Делать-то ты чо будешь?
Linda-chan, закомпиляй руби под utf-16
Linda-chan, какие голоса?
Linda-chan, детский сад
Linda-chan, ещё можно запилить псевдофс где всё будет транслитироваться в cp1251 и будет тебе счастье
Linda-chan, обсуждение и было
Linda-chan, есть псевдофс которые цепляются на твою корневую фс для удобноты работы с метаданными которые не может хост фс.
Linda-chan, вендоебы должны страдать.
Linda-chan, ...сказало быдло с пивасиком с окраины.
0xd34df00d, Ай, малацца, я уж думал, когда ты явишься
chcp 65001
Linda-chan, пруф или не едящих говно людей.
У тебя есть CreateProcess(). Делай CHCP.
s/линупс/не-винда/
На солярисе и aix у меня тута тоже уникод.
Спасибо, что напомнил.
Автор хочет
# Encoding: UTF-16
? Впрочем, не знаю, умеет ли оно UTF-16.
забрал :3
Автор хочет
C:\Ruby\bin\ruby.exe "C:\Файло\Byaka.rb"
А оно отвечает, что
Can't find file C:\bofanfoa\Byaka.rb
1200 - LE, 1201 - BE
А, руби и кодировка FS. Можешь погуглить, там, вроде, была какая-то история. Краткая версия: переходи на линукс (^ ^)'
Никогда не пишите на раби, не пользуйтесь софтом на раби и ссыте на программистов на раби.
chcp 1251 > nul && python script.py
И ты, Брут...
Алсо, дело не в ФС, а в парсинге аргументов. Я так поняла, он делает GetCommandLine() и ждёт, что там будет UTF-8. А там не может быть UTF-8 никак.
поссал ИТТ в лицо любителю аналогий, рекомендую ссать другим.
аналогии - говно и ими оперируют в дискуссиях только тотальные долбоебы уровня ОП.
utf-8 - стандарт. те кто идут против стандартов - пидоры и сосали.
Linda-chan, а вдруг?
В индусском говнокоде виновата. Хули ты хотел?
Бугага.
Хорошо, что ты зашёл. Как там лимузин?
==> MSDN.
Зря не веришь (^ ^)
Смотря во что.
Linda-chan, В БОГА!
Я есть Создатель. Следующий.
В меня. Можно пожертвования.
Linda-chan, Криейтор! Творцы нам тут нахуй не нужны.
Это ты не нужен. Покинь тред и лечи смертельно раненую душу.
И водителя лимузина забери.
Linda-chan, копирайтик поставить © забыл...
единственно верный камент во всем треде :D
Окей. Не уходи.
Трафик. У меня ж Дальсвязь.
Linda-chan, ну там этот эпизод, если в кратце
Вот да
зовите Шмелленгера и запасайтесь клеенкой!
Я тред пока что не начинал читать, и с руби знаком поверхностно, но в руби же нет юникодного строкового типа. Есть байтовые строки, как в сишечке. Следовательно, такое поведение (стандартизация на UTF-8) можно понять. Пойду проверю, как в Python сделано.
ninesigns, ты идиот
Linda-chan, скорее всего, эта программа использует неюникодный вариант API. И ожидает получить там UTF-8. Это желание реализуемо, но проще выкинуть руби.
Graf, линукс это куда более горький кактус
Notis, ты наркоман? Винда не умеет в утф8.
chcp 65001&&echo Нет ты!>test.txt
но ведь на нём и так пишут или японцы или просто ебанутые...
Я тут подумал, а что если сделать файл ruby.cmd примерно с таким содержанием:
@echo off
chcp 65001>nul
echo %*>%temp%\cmdl.txt
chcp 1251>nul
for /f "delims=" %%a in (%temp%\cmdl.txt) do ruby.exe %%a
del %temp%\cmdl.txt
вдруг заработает?
Вместо 1251 можно попробовать 866.
в CreatepProcess. лiл.
на самом деле нет. и уже давно нет.
там довольно долго была гвоздиками вбита локаль, с которой ты собрал интерпретатор. с 1.9 это уже не так.
igelko, там байтовые строки, знающие о своей кодировке. Неужели это решает все проблемы? Неужели ничего не сломается, если в ARGV вместо строк в UTF-8 появятся строки в UTF-16LE?
Linda-chan, попробуй альтернативный интерпретатор руби, например, JRuby
Да ну ёлки ж... Почему никто читать не умеет-то? Речь не о языке, а о екзешнике >_<
Я подозреваю, что так она и делает.
Выкинуть не могу, придётся биться на костылях =_=
Linda-chan, если екзешник (интерпретатор) использует не юникодный вариант API, то передать через командную строку UTF-8 возможно, я считаю.
Linda-chan, опиши отдельным постом, что там за ситуация, кто кого вызывает, от чего исходный код есть, от чего нету, адекватные люди подскажут костыль. Спокойной ночи.
Тоже вариант, но если стартовать Руби из другой программы, не CMD, то придётся ручками всё это делать =_=
По какой-то причине выполнение всегда прерывается на chcp. Тоесть команда выполняется, и всё, дальше возврат в оболочку.
Есть Windows билд?
The Ruby Programming Language on the JVM
Ох.
Возможно всё, конечно, но так быть не должно.
Странно. %temp% случайно пробелов не содержит?
В любом варианте, я просто голые BAT файлы писала, где вызов chcp, а потом echo. Тишина, кроме сообщения о смене кодовой страницы. А вообще путь задан коротким именем.
Очень странно, у меня работает. Ну, как работает - меняю ruby.exe на echo ruby.exe и в ответ на
ryby.cmd "C:\Файло\Byaka.rb"
вижу
ruby.exe "C:\Файло\Byaka.rb"
Краткое описание событий.
#vyqmf/#105
Краткое описание решения.
#vyqmf/#61
Решение, признаться, было известно с самого начала (ну, ещё у меня иногда прокатывает вариант с коротким именем файла, который на NTFS не содержит кириллицы), я просто сообщила, что есть такая ситуация.
Может быть особенность XP?
Справедливости ради, это в данном случае - CMD, а не Windows целиком. Сама Windows умеет конвертировать строки в UTF-8, но не умеет догадываться, что программа, использующая ANSI версию функции, ждёт получить UTF-8.
Проверил в XP - действительно не работает.
Глюк.
Linda-chan, пользоваться руби в винде бессмысленно, потому что все запускают его в линуксе. Если ты хочешь деплоить руби в винде, используй JRuby, иначе ты просто потратишь время.
Идиотодетектор продолжает работать.
у тебя нет опыта работы с руби, ты получаешь бесплатный и правильный совет, но отвечаешь ругательствами - очень эффективно
Зато у тебя есть опыт пальцовки без вникания в суть проблемы. Ну хорошо, ты доказал, что ты - крутой мэн, который деплоит не переставая. А теперь вчитайся в пост и пойми, о чём идёт речь.
P.S. За Жаву нужно приговаривать к манямбе.
могу просто посоветовать вместо абсолютного пути к файлам передавать относительный
выкинь свой говнософт, попробуй нормальное что-нибудь http://nanoc.ws http://jekyllrb.com http://stasis.me
Какой хирый. А он не хочет. Везде хочет, а для -r хочет абсолютный путь.
Ты тоже в булошную на вертолёте летаешь?
Linda-chan, а ты велосипед для каждой поездки строишь?
что такое -r?
Маякуй, когда разум вернётся в твою бренную голову.
Параметр.
чего?
Екзешника.
haml --r Z:\Src\Data.rb template.haml data.htm
пиздец, все понятно теперь
Ура!
#vyqmf/146 ну по-хорошему интерпретатор должен для общения с внешним миром хотя бы переменную LANG посмотреть и узнать какая кодировка у stdin/out и всего остального.
Кстати да, можно сходить в сорцы - может можно правильную кодировку через LC_ALL какой-нибудь задать, прости господи.
#vyqmf/146 ну по-хорошему интерпретатор должен для общения с внешним миром хотя бы переменную LANG посмотреть и узнать какая кодировка у stdin/out и всего остального.
Кстати да, можно сходить в сорцы - может можно правильную кодировку через LC_ALL какой-нибудь задать, прости господи.
а вот это ты толсто щас.
кстати никто не сказал, что это именно руби хочет.
Это скорее абстракция над ОС тонковата в этом месте и надо сделать приседание в сорцах.
У меня в пейтонем скрипте как-то так пришлось сделать, чтоб работало:
https://github.com/Igelko/p...mail_unpacker.py#L21
И далее втупую перекодировать:
https://github.com/Igelko/p...mail_unpacker.py#L95
Там надо просто хорошо понимать, что к тебе на вход попадает - это жи байтики, про которые интерпретатор по-дефолту думает, что наверное это строчка в utf-8, раз в нём по-дефолту utf-8.
"Руби хочет" - это метафора. На самом деле там был грубый баг, когда бралась ANSI версия функции и программа с покерфеймом делала вид, что там наверняка UTF-8.
В Windows тебе не нужно думать, что тебе "по дефолту попадает". Если используешь юникодные функции, то тебе попадает UTF-16.
igelko, кодировку аргументов ещё можно обойти в своём скрипте, но один из аргументов интерпретатора - путь к скрипту, тут уж не пофиксишь, так как твой скрипт не запустится.
Баг этот в официальном релизе интерпретотора под винду, так что это именно "проблема руби".
all software is broken. (c)
а, ну это прелестно. просто прелестно.
так никто не пользуется этим интерпретатором потому что, всем плевать на эту платформу
вот только не всем, а тем кто интерпретатор пишет.
Алсо, ты, как и половина ораторов здесь, путаешь программу на интерпретаторе и сам интерпретатор.
netoneko, как там у вас в манямирке, перевалило за один процент или всё ещё так же?
пейтон, к примеру, под венду намного лучше работает.
один процент чего?
не, ну серверная венда зверь всё-таки редкий в вебе.
Вот будешь проходить флюрографию, а там...
а ты пробовала передавать путь в руби-скрипт? может, это баг в хамле, а не в интерпретаторе
(I didn't mean "Ruby is garbage" [any more than I mean "software is garbage, including all software that I've written"])
Почему ты употребляешь "мне" во множественном числе?
я говорю про авторов и контрибьюторов MRI, а не про себя (хотя мне тоже все равно, как руби работает на винде)
Вэб - это не весь интерпрайз.
он-то тут причем
не весь, но в абсолютном количестве серверов пока форточка ощутимо меньше.
ты скажи конкретно, что ты хочешь сказать
Я за баланс.
1% на десктопе
Были упомянуты серверы.
Потому что все они трудятся над другими важными делами.
какая связь между руби и линукс-десктопом? что ты несешь?
почему у тебя кстати старая версия руби?
Потому что рубиинсталлер собирают отморозки, которые то ли не понимают, что плохого в статической линковке к DLL, которые переписывают в каждой версии Windows заново, то ли не понимают как идёт процесс сборки и как на него можно повлиять. В багтрекере какие-то невнятные мычания на тему "У нас тулчайн, мы не понимать как оно работать".
Выполняют программы на сервере, а разрабатывают на десктопе. А на десктопе лидирует винда.
и что? пускай лидирует на десктопе. Разрабатывают обычно на платформе, близкой к тому, где будут запускать, так что никто в здравом уме на руби в винде не разрабатывает.
А там старый-добрый советский аппарат, всё стабильно и надёжно!
Увы, старых добрых аппаратов почти не осталось, как это ни странно.