2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 idn2 for windows
Сообщение22.05.2018, 18:03 


05/09/16
12058
Разыскиваю утилиту командной строки для windows 7 (для cmd.exe), которая бы конвертировала имена национальных доменов в punycode, типа утилиты idn2 имеющейся для linux-а

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

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

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение22.05.2018, 20:09 
Заслуженный участник


15/05/05
3445
USA
Вот этот пример не подойдет?
NLS: Internationalized Domain Name (IDN) Conversion Sample

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

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

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение22.05.2018, 20:38 


05/09/16
12058
Yuri Gendelman
Я не умею превращать примеры кода в утилиты :oops:

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение22.05.2018, 22:02 
Заслуженный участник


15/05/05
3445
USA
Выложу вечером, после работы.

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение22.05.2018, 22:44 


05/09/16
12058
Yuri Gendelman
Спасибо :)
Заодно, может подскажете как правильно делать command substitution в windowd 7 cli, в bash это делают так:
Код:
ping `idn2 президент.рф`

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение22.05.2018, 23:17 
Заслуженный участник


20/08/14
11766
Россия, Москва
wrest
Кажется прямо этого не сделать, но работает такой финт:
Код:
for /f %s in ('idn2 любой_текст') do ping %s
При использовании в батниках проценты надо удвоить. Если в выдаче команды будут пробелы или прочие спецсимволы, то придётся добавить ключи для for с указанием всю строку без разделителей забирать в одну переменную (см. справку for /?).

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение22.05.2018, 23:24 


05/09/16
12058
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 
Заслуженный участник


15/05/05
3445
USA
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 


05/09/16
12058
Yuri Gendelman
Вы очень добры, но на выходе мне нужна только одна строка, с пуникодом и без пояснительных текстов, ведущих пробелов и табуляций.

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение23.05.2018, 08:49 


21/05/16
4292
Аделаида
А зачем? Вы пишете какую-то программу? Если да, то на любом языке програмированния можно поправить вывод как нужно.

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение23.05.2018, 09:06 


05/09/16
12058
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 
Заслуженный участник


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

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение23.05.2018, 15:03 
Заслуженный участник


20/08/14
11766
Россия, Москва

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

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

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

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

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

 Профиль  
                  
 
 Re: idn2 for windows
Сообщение23.05.2018, 15:47 


05/09/16
12058
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 
Заслуженный участник


15/05/05
3445
USA
wrest в сообщении #1314237 писал(а):
...на выходе мне нужна только одна строка, с пуникодом и без пояснительных текстов, ведущих пробелов и табуляций.
В архиве есть исходный код. Уберите не нужные Вам wprintf и перекомпилируйте.

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group