2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 idn2 for windows
Сообщение22.05.2018, 18:03 
Разыскиваю утилиту командной строки для windows 7 (для cmd.exe), которая бы конвертировала имена национальных доменов в punycode, типа утилиты idn2 имеющейся для linux-а

То есть, чтобы работало примерно так

Код:
C:\>idn2 президент.рф
xn--d1abbgf6aiiy.xn--p1ai
С:\>

 
 
 
 Re: idn2 for windows
Сообщение22.05.2018, 20:09 
Вот этот пример не подойдет?
NLS: Internationalized Domain Name (IDN) Conversion Sample

Я вставил код примера в новый проект в VS2013 и добавил библиотеку Normaliz.lib. Все работает.

Превратить этот пример в утилиту достаточно просто.

 
 
 
 Re: idn2 for windows
Сообщение22.05.2018, 20:38 
Yuri Gendelman
Я не умею превращать примеры кода в утилиты :oops:

 
 
 
 Re: idn2 for windows
Сообщение22.05.2018, 22:02 
Выложу вечером, после работы.

 
 
 
 Re: idn2 for windows
Сообщение22.05.2018, 22:44 
Yuri Gendelman
Спасибо :)
Заодно, может подскажете как правильно делать command substitution в windowd 7 cli, в bash это делают так:
Код:
ping `idn2 президент.рф`

 
 
 
 Re: idn2 for windows
Сообщение22.05.2018, 23:17 
wrest
Кажется прямо этого не сделать, но работает такой финт:
Код:
for /f %s in ('idn2 любой_текст') do ping %s
При использовании в батниках проценты надо удвоить. Если в выдаче команды будут пробелы или прочие спецсимволы, то придётся добавить ключи для for с указанием всю строку без разделителей забирать в одну переменную (см. справку for /?).

 
 
 
 Re: idn2 for windows
Сообщение22.05.2018, 23:24 
Dmitriy40
А... ну да, руками набирать не очень, а если в батнике то работать вот так будет, чтобы передать президент.рф как параметр в батник?

Код:
for /f %%s in ('idn2 %1') do ping %%s


Кстати апрстрофы там должны быть прямые, не бэктики?
Прямые: ''''''
Бэктики: ``````
И еще -- а перевод строки обрезается? Ну типа так будет работать
Код:
for /f %%s in ('idn2 %1') do nslookup %%s 8.8.8.8

 
 
 
 Re: idn2 for windows
Сообщение23.05.2018, 03:57 
Yuri Gendelman в сообщении #1314182 писал(а):
Выложу вечером, после работы.
В этом архиве сама утилита и исходный код:
idn_code_exe.zip
Исходный код - это минимально модифицированный пример от MS:
NLS: Internationalized Domain Name (IDN) Conversion Sample

Пример вызова:
Код:
> idn.exe президент.рф
На выходе - 3 строки: (1) исходная строка; (2) Punycode; (3) обратное преобразование в Unicode (для контроля).
Код:
Converting string: \x043f\x0440\x0435\x0437\x0438\x0434\x0435\x043d\x0442.\x0440\x0444
   Punycode value: xn--d1abbgf6aiiy.xn--p1ai
  Back to Unicode: \x043f\x0440\x0435\x0437\x0438\x0434\x0435\x043d\x0442.\x0440\x0444

 
 
 
 Re: idn2 for windows
Сообщение23.05.2018, 08:39 
Yuri Gendelman
Вы очень добры, но на выходе мне нужна только одна строка, с пуникодом и без пояснительных текстов, ведущих пробелов и табуляций.

 
 
 
 Re: idn2 for windows
Сообщение23.05.2018, 08:49 
А зачем? Вы пишете какую-то программу? Если да, то на любом языке програмированния можно поправить вывод как нужно.

 
 
 
 Re: idn2 for windows
Сообщение23.05.2018, 09:06 
kotenok gav в сообщении #1314240 писал(а):
А зачем?

Мне время от времени надо "пинговать" и "nslookup-ить" такие домены (и еще whois-ить). Сейчас я их конвертирую в онлайн конверторе и потом подставляю результат в команду ping и nslookup. Хотелось избежать "ручной" конвертации с копи-пастом.

-- 23.05.2018, 09:11 --

Yuri Gendelman
Еще сразу спрошу. Exe подозрительно небольшой. Мне надо будет устанавливать redist-ы? Не хотелось бы, можно ли все нужное уложить в один запускаемый файл?

 
 
 
 Re: idn2 for windows
Сообщение23.05.2018, 09:31 
Таки ж, стесняюсь спросить, не проще поставить кой-нить Cygwin/Msys и работать методами Линукса, коли уж вы его умеете?
wrest в сообщении #1314246 писал(а):
Exe подозрительно небольшой. Мне надо будет устанавливать redist-ы?
Не знаю, кто такие redistы, но, опять же, не быстрее проверить?
wrest в сообщении #1314237 писал(а):
на выходе мне нужна только одна строка, с пуникодом и без пояснительных текстов, ведущих пробелов и табуляций
Одна строка выделяется findом, пояснительные надписи умеет убирать for либо операция подстроки стандартного cmd.

 
 
 
 Re: idn2 for windows
Сообщение23.05.2018, 15:03 

(Попытка проверки)

Как и опасался, исходник оказался не полным (сама функция конвертации в исходном коде или её реализация в Normaliz.dll отсутствует, фактически в архиве лишь оболочка её вызова).

Ну а проверка под Win7x64 выдаёт
Изображение
При запуске под WinXP (x86/x32) ещё смешнее:
Изображение

Простите, но так компилить небольшие утилиты это издевательство над юзером ...

PS. Хотел сам сделать, может и мне где пригодилось бы, на древней дельфи, уж оно то работает везде, но не нашёл быстро нормально описанного алгоритма преобразования. :-( Более того, похоже http (и любые другие) ссылки обрабатываются по другому (делятся по точкам и в каждый сегмент добавляется xn--). Читать длиннющие малопонятные стандарты как обычно лень. :-(

 
 
 
 Re: idn2 for windows
Сообщение23.05.2018, 15:47 
iifat в сообщении #1314248 писал(а):
Таки ж, стесняюсь спросить, не проще поставить кой-нить Cygwin/Msys и работать методами Линукса, коли уж вы его умеете?

Ну, есть причины. У меня есть скрипт ("батник") который делает кучу запросов nslookup к разным dns-серверам, findstr-ом вырезает из ответов nslookup-а то, что надо и т.п. И он работает на любом компьютере с виндовс, т.к. не использует dotnet, microsoft visual c++ redistributable, не зависит от диалектов powershell-а и так далее, и не требует от юзера обладать администраторскими правами.
Но есть загвоздка - в windows- е nslookup не поддерживает idn.
Поэтому self-contained утилита командной строки, которая не требовала бы от юзера ничего устанавливать (кроме как скопировать ее саму и "батник" в профиль пользователя или в какое-то еще место, прописанное в path) была бы мне полезна.

"Методы Линукс" мне понадобились для того, чтобы я мог написать и запускать подобный bash-скрипт не находясь в офисе, благо под андроид есть терминалка termux, не требующая root-а и с неплохим встроенным набором возможностей + я попросил сообщество добавить в репозиторий библиотеку libidn2 в которую входит "бинарник" idn2, и они это сделали.

 
 
 
 Re: idn2 for windows
Сообщение23.05.2018, 16:13 
wrest в сообщении #1314237 писал(а):
...на выходе мне нужна только одна строка, с пуникодом и без пояснительных текстов, ведущих пробелов и табуляций.
В архиве есть исходный код. Уберите не нужные Вам wprintf и перекомпилируйте.

wrest в сообщении #1314246 писал(а):
Exe подозрительно небольшой. Мне надо будет устанавливать redist-ы? Не хотелось бы, можно ли все нужное уложить в один запускаемый файл?
Скорее уж подозрительно большой.
Собственно преобразование в punycode выполняется одним обращением:
Код:
IdnToAscii(0, strInput, -1, pPunycode, IDN_MAX_LENGTH);
к системной библиотеке Normaliz.dll.

 
 
 [ Сообщений: 30 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group