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