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