<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Кодировка кириллицы для использования в URL]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=10170&amp;type=atom" />
	<updated>2014-11-19T20:55:09Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=10170</id>
		<entry>
			<title type="html"><![CDATA[AHK: Кодировка кириллицы для использования в URL]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=88476#p88476" />
			<content type="html"><![CDATA[<p>В URL можно использовать только латинские буквы, цифры, и некоторые знаки препинания. Остальные символы должны быть заменены специальными кодами. Сначала каждый символ кириллицы кодируется в UTF-8 в последовательность из двух байтов, а затем каждый байт этой последовательности записывается в шестнадцатеричном представлении:<br /></p><div class="quotebox"><blockquote><p>М -&gt; D0 и 9C -&gt; %D0%9C<br />и -&gt; D0 и B8 -&gt; %D0%B8<br />к -&gt; D0 и BA -&gt; %D0%BA<br />р -&gt; D1 и 80 -&gt; %D1%80 и т. д.</p></blockquote></div><p>Перед каждым таким шестнадцатеричным кодом байта, согласно спецификации URL, ставится знак процента (%) — отсюда возник английский термин «percent-encoding», обозначающий способ кодирования символов в URL и URI.</p><p>Таким образом, слово &quot;программа&quot; приобретёт вид:</p><div class="quotebox"><blockquote><p>%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B0</p></blockquote></div><p> Допустима предварительная кодировка слова и в ANSI. Тогда слово &quot;программа&quot; будет выглядеть</p><div class="quotebox"><blockquote><p>%EF%F0%EE%E3%F0%E0%EC%EC%E0</p></blockquote></div><p>Функция URIEncode() для кодирования в «percent-encoding»:<br /></p><div class="codebox"><pre><code>URIEncode(str, encoding := &quot;UTF-8&quot;)
{
   PrevFormat := A_FormatInteger
   SetFormat, IntegerFast, H
; кодируем стоку в указанную кодировку с помощью StrPut()
   VarSetCapacity(var, StrPut(str, encoding))
   StrPut(str, &amp;var, encoding)
; последовательно перебирая символы, кодируем их в URL-формат   
   While code := NumGet(Var, A_Index - 1, &quot;UChar&quot;)   ; пока code не равно 0, что означает конец строки
   {
      bool := (code &gt; 0x7F || code &lt; 0x30 || code = 0x3D)   ; отсеиваем символы, которые кодировать не нужно
      UrlStr .= bool ? &quot;%&quot; . SubStr(&quot;0&quot; . SubStr(code, 3), -1) : Chr(code)
   }
   SetFormat, IntegerFast, % PrevFormat
   Return UrlStr
}</code></pre></div><p>По умолчанию кодирует в UTF-8, если нужно в ANSI, при вызове указываем вторым параметром &quot;CP0&quot;.<br />Пример использования. Составляем поисковый запрос в Google с кириллицей и кавычками:<br /></p><div class="codebox"><pre><code>text := &quot;&quot;&quot;кодировка URL&quot;&quot;&quot;
GoogleSearch := &quot;https://www.google.ru/search?q=&quot;

MsgBox, % url := GoogleSearch . URIEncode(text)
Run, % url</code></pre></div><p><a href="http://forum.script-coding.com/viewtopic.php?id=10161"><strong>Связанная тема</strong></a></p>]]></content>
			<author>
				<name><![CDATA[teadrinker]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=24515</uri>
			</author>
			<updated>2014-11-19T20:55:09Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=88476#p88476</id>
		</entry>
</feed>
