<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[Серый форум &mdash; AHK: Извлечь символы utf-8]]></title>
		<link>https://forum.script-coding.com/viewtopic.php?id=8498</link>
		<atom:link href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8498&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AHK: Извлечь символы utf-8».]]></description>
		<lastBuildDate>Thu, 19 Sep 2013 10:24:58 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75472#p75472</link>
			<description><![CDATA[<p>Спасибо за разъяснения.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 19 Sep 2013 10:24:58 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75472#p75472</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75471#p75471</link>
			<description><![CDATA[<p>Он указывает размер читаемых или писомых данных (байт). Ну и по идее в случае чтения ещё может влиять на формат строкового представления числа: если uchar, то будет 255, а если char, то -1.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Thu, 19 Sep 2013 10:23:00 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75471#p75471</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75470#p75470</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Там нет смысла писать что-то другое. Они просто переводят число, представленное байтом, в число, представленное цифрами, и наоборот, а не код символа в символ.</p></blockquote></div><p>Так зачем тогда вообще нужен этот параметр?</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 19 Sep 2013 09:42:04 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75470#p75470</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75469#p75469</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>В NumGet и NumPut.</p></blockquote></div><p>Там нет смысла писать что-то другое. Они просто переводят число, представленное байтом, в число, представленное цифрами, и наоборот, а не код символа в символ.</p><div class="quotebox"><blockquote><p>Возвращается CP1251, и код из 20 поста получает нужный текст.</p></blockquote></div><p>Ну да, это и есть дефолтная кодировка на русской Windows.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Thu, 19 Sep 2013 09:37:25 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75469#p75469</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75468#p75468</link>
			<description><![CDATA[<div class="codebox"><pre><code>Где именно писать?</code></pre></div><p>В NumGet и NumPut.<br /></p><div class="quotebox"><blockquote><p>Подозреваю, что для файла без BOM file.Encoding вернёт 0</p></blockquote></div><p>Возвращается CP1251, и код из 20 поста получает нужный текст.</p><p>Вообщем я понял что если сам текст в файле в utf-8 или utf-16, то решения как извлечь текст - нет. Но хотя бы есть решение для ANSI.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 19 Sep 2013 08:38:52 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75468#p75468</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75467#p75467</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Просто это сработало на нескольких файлах, и я подумал что всё правильно.</p></blockquote></div><p>Что значит сработало? Подозреваю, что для файла без BOM file.Encoding вернёт 0, т.е. будет использована дефолтная ANSI-кодировка. У нас она однобайтная. Если строка в ней, то её будет видно.</p><div class="quotebox"><blockquote><p>То есть проблемы будут только с utf-8 и utf-16, для остальных достаточно писать &quot;UChar&quot;?</p></blockquote></div><p>Где именно писать?</p><div class="quotebox"><blockquote><p>Узнать это скриптом никак нельзя?</p></blockquote></div><p>Не представляю как.</p><div class="quotebox"><blockquote><p>Так панацеи нет? <br />Какие то алгоритмы ведь эти файлы обрабатывают, или в них заранее все известно про свойства файла.</p></blockquote></div><p>Если это тип файлов, используемый какой-то программой, то естественно разработчик всё знает.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Thu, 19 Sep 2013 08:29:06 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75467#p75467</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75466#p75466</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Какой может быть encoding у бинарного файла? Никакого.</p></blockquote></div><p>Просто это сработало на нескольких файлах, и я подумал что всё правильно. То есть проблемы будут только с utf-8 и utf-16, для остальных достаточно писать &quot;UChar&quot;?<br /></p><div class="quotebox"><blockquote><p>так что некоторые байты вы можете не увидеть.</p></blockquote></div><p>Ну хоть что то будет.<br /></p><div class="quotebox"><blockquote><p>Если в этом файле есть текстовые строки, то их кодировку вы сами должны знать</p></blockquote></div><p>Узнать это скриптом никак нельзя?<br /></p><div class="quotebox"><blockquote><p>И нет гарантии, что StrGet отобразит вкраплённые в бинарный файл строки правильно. Например, если это строка в utf-16, то там каждый символ кодируется двумя байтами. Если с начала файла до начала строки будет нечётное количество байтов...</p></blockquote></div><p>Так панацеи нет? <br />Какие то алгоритмы ведь эти файлы обрабатывают, или в них заранее все известно про свойства файла.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Thu, 19 Sep 2013 07:28:46 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75466#p75466</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75464#p75464</link>
			<description><![CDATA[<div class="codebox"><pre><code>Encoding := File.Encoding</code></pre></div><p>Какой может быть encoding у бинарного файла? Никакого. Если в этом файле есть текстовые строки, то их кодировку вы сами должны знать и указать в функции StrGet. Если просто хотите все байты перевести в символы, то учтите, что не для всех возможных значений байта есть какой-то видимый символ, так что некоторые байты вы можете не увидеть. И нет гарантии, что StrGet отобразит вкраплённые в бинарный файл строки правильно. Например, если это строка в utf-16, то там каждый символ кодируется двумя байтами. Если с начала файла до начала строки будет нечётное количество байтов, то первый байт строки (половина первого кода символа) будет спарен с предыдущим (не относящимся к строке) байтом и образует какой-то левый код. Второй байт первого символа строки будет спарен с первым байтом второго символа и т.д., так что получится тарабарщина. Та же проблема с utf-8, т.к. там неанглийские символы обозначаются двумя и более байтами.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Thu, 19 Sep 2013 03:29:50 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75464#p75464</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75461#p75461</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Можно ли как то проще удалить нулевые байты?</p></blockquote></div><p>Проще вместо нулевых записать другие:<br /></p><div class="codebox"><pre><code>
File := FileOpen(FileName, &quot;r&quot;)  
File.Pos := 0
Length := File.Length
File.RawRead(buf, Length) 
Encoding := File.Encoding 
File.Close()  
    
Loop % Length 
    (!NumGet(buf, A_Index - 1, Encoding)) ? NumPut(32, buf, A_Index - 1, Encoding) : 0
MsgBox % StrGet(&amp;buf, Encoding)
</code></pre></div><p>Но вопрос о простоте остаётся.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Wed, 18 Sep 2013 17:35:34 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75461#p75461</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=75460#p75460</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>не&nbsp; ясно как тут использовать RawRead для получения текста с которым уже можно работать.</p></blockquote></div><p>Вроде дошло как извлечь текст из бинарного файла:<br /></p><div class="codebox"><pre><code>
File := FileOpen(FileName, &quot;r&quot;)  
File.Pos := 0
Length := File.Length ; в File.Pos и Length можно задать смещения
file.RawRead(buf, Length) 
Encoding := File.Encoding
file.Close()
 
Loop % Length 
    hex .= NumGet(buf, A_Index - 1, &quot;UChar&quot;) &quot; &quot; 

StringReplace, hex, hex, %A_Space%0, , 1

Loop, parse, hex, %A_Space% 
    NumPut(A_LoopField, buf, A_Index - 1, &quot;UChar&quot;)

Gui, Add, Edit, r55 w777, % StrGet(&amp;buf, Encoding)
Gui, Show 
Return
</code></pre></div><p>И вопрос: <br />Можно ли как то проще удалить нулевые байты?<br />Я так понял что StrGet натыкаясь на 0х00 прекращает дальнейшее извлечение.</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Wed, 18 Sep 2013 16:37:17 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=75460#p75460</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=73987#p73987</link>
			<description><![CDATA[<p>Для получения знаний о бесполезной мороке? <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Извините, я в этом смысла не вижу.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Mon, 22 Jul 2013 11:58:16 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=73987#p73987</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=73984#p73984</link>
			<description><![CDATA[<p>Мне, для получения знаний исходя из примера. Тем более пригодится в тех случаях когда Loop, Read работать небудет</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 22 Jul 2013 11:20:49 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=73984#p73984</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=73983#p73983</link>
			<description><![CDATA[<p>Но если Loop, Read работает, то зачем бинарное чтение? Это лишняя морока.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Mon, 22 Jul 2013 11:16:23 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=73983#p73983</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=73982#p73982</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Парсить пока нечего, т.к. вы файл не прочитали. Для чтения бинарных файлов у объекта есть метод RawRead.</p></blockquote></div><div class="quotebox"><blockquote><p>Без конкретики могу только посочувствовать.</p></blockquote></div><p>В файле есть строки вида:<br /></p><div class="quotebox"><blockquote><p>N;ENCODING=QUOTED-PRINTABLE;CHARSET=utf-8:=D0=92=D0=BE=D0=BB=D0=BE=D0=B4=D1=8C=D1=8F;;;;</p></blockquote></div><p>после них идут номера телефонов которые надо извлечь RegExMatch.<br /></p><div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Вот ещё вопрос, файл видимо бинарный и FileRead его нечитает. Как тут быть?</p></blockquote></div><div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Можно использовать объект File. Его возвращает функция FileOpen.</p></blockquote></div><div class="quotebox"><cite>YMP пишет:</cite><blockquote><p>Парсить пока нечего, т.к. вы файл не прочитали. Для чтения бинарных файлов у объекта есть метод RawRead.</p></blockquote></div><p>не&nbsp; ясно как тут использовать RawRead для получения текста с которым уже можно работать.</p><p>Всё остальное по большей части до меня дошло, большое спасибо за разъяснения!</p>]]></description>
			<author><![CDATA[null@example.com (serzh82saratov)]]></author>
			<pubDate>Mon, 22 Jul 2013 10:46:13 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=73982#p73982</guid>
		</item>
		<item>
			<title><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link>https://forum.script-coding.com/viewtopic.php?pid=73974#p73974</link>
			<description><![CDATA[<div class="quotebox"><cite>serzh82saratov пишет:</cite><blockquote><p>Это значит совсем ничего <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /></p></blockquote></div><p>Ну, тогда капец. <img src="//forum.script-coding.com/img/smilies/sad.png" width="15" height="15" /></p><div class="quotebox"><blockquote><p>Пробовал RawRead, но ничего не вышло.</p></blockquote></div><p>Без конкретики могу только посочувствовать.</p><div class="quotebox"><blockquote><p>Кстати не понял почему <em>Loop, Read</em> читает файл в отличии от FileRead?</p></blockquote></div><p>Не знаю, это надо смотреть в исходники АНК. Видимо, просто ищет символы перевода строки и считывает то, что между ними. Если там нет нулевых байтов, то всё должно считаться, по идее.</p><div class="quotebox"><blockquote><p>NumPut я так понял пишет данные в указанный байт A_Index - 1. А что за параметр UChar? Разве можно цифру записать по разному?</p></blockquote></div><p>Она пишет в buf по смещению от его начала на A_Index-1 байтов. Число можно записать по-разному. Если как байт, то это 8 бит займёт в памяти, если как слово (Short, UShort), то 16 бит; если как двойное слово (Int, UInt), то 32 бита, и т.д. Как байт можно записать числа от 0 до 255, т.к. возможных комбинаций из 8 бит, каждый из которых может иметь два значения (0 и 1) — только 256 (2 в 8-й степени).</p><p>Вы понимаете разницу между цифрой и числом? Число — это количество чего-то. Цифра — строковый символ, она обозначает число. Одно и то же число можно обозначить разными цифрами или вообще словами: 255, FF, 11111111, двести пятьдесят пять. Так вот, строка D0=92=D0=BE=D0=BB=D0=BE=D0=B4=D1=8C=D1=8F состоит из обозначений чисел. Их нужно перевести в сами числа величиной в байт, чтобы получить строку UTF-8, которую потом прочитать через StrGet .</p><p>Если в строке вы видите символ 5, это не значит, что в памяти на этом месте байт со значением 5. Что там реально соответствует этому символу, зависит от кодировки. Этот символ <em>обозначает</em> число 5, а не является им. Чтобы в памяти реально было число 5, нужно использовать NumPut, которая берёт значение символа (а не код символа) и пишет его в память уже непосредственно в бинарном виде.</p><p>Строго говоря, число в памяти — это тоже одно из возможных <em>представлений</em> числа, но это то представление, которое понятно процессору, в отличие от символа 5, который понятен человеку.</p>]]></description>
			<author><![CDATA[null@example.com (YMP)]]></author>
			<pubDate>Mon, 22 Jul 2013 05:38:15 +0000</pubDate>
			<guid>https://forum.script-coding.com/viewtopic.php?pid=73974#p73974</guid>
		</item>
	</channel>
</rss>
