<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[Серый форум &mdash; AHK: Извлечь символы utf-8]]></title>
	<link rel="self" href="https://forum.script-coding.com/extern.php?action=feed&amp;tid=8498&amp;type=atom" />
	<updated>2013-09-19T10:24:58Z</updated>
	<generator>PunBB</generator>
	<id>https://forum.script-coding.com/viewtopic.php?id=8498</id>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75472#p75472" />
			<content type="html"><![CDATA[<p>Спасибо за разъяснения.</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-09-19T10:24:58Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75472#p75472</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75471#p75471" />
			<content type="html"><![CDATA[<p>Он указывает размер читаемых или писомых данных (байт). Ну и по идее в случае чтения ещё может влиять на формат строкового представления числа: если uchar, то будет 255, а если char, то -1.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-09-19T10:23:00Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75471#p75471</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75470#p75470" />
			<content type="html"><![CDATA[<div class="quotebox"><blockquote><p>Там нет смысла писать что-то другое. Они просто переводят число, представленное байтом, в число, представленное цифрами, и наоборот, а не код символа в символ.</p></blockquote></div><p>Так зачем тогда вообще нужен этот параметр?</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-09-19T09:42:04Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75470#p75470</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75469#p75469" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-09-19T09:37:25Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75469#p75469</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75468#p75468" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-09-19T08:38:52Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75468#p75468</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75467#p75467" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-09-19T08:29:06Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75467#p75467</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75466#p75466" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-09-19T07:28:46Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75466#p75466</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75464#p75464" />
			<content type="html"><![CDATA[<div class="codebox"><pre><code>Encoding := File.Encoding</code></pre></div><p>Какой может быть encoding у бинарного файла? Никакого. Если в этом файле есть текстовые строки, то их кодировку вы сами должны знать и указать в функции StrGet. Если просто хотите все байты перевести в символы, то учтите, что не для всех возможных значений байта есть какой-то видимый символ, так что некоторые байты вы можете не увидеть. И нет гарантии, что StrGet отобразит вкраплённые в бинарный файл строки правильно. Например, если это строка в utf-16, то там каждый символ кодируется двумя байтами. Если с начала файла до начала строки будет нечётное количество байтов, то первый байт строки (половина первого кода символа) будет спарен с предыдущим (не относящимся к строке) байтом и образует какой-то левый код. Второй байт первого символа строки будет спарен с первым байтом второго символа и т.д., так что получится тарабарщина. Та же проблема с utf-8, т.к. там неанглийские символы обозначаются двумя и более байтами.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-09-19T03:29:50Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75464#p75464</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75461#p75461" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-09-18T17:35:34Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75461#p75461</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=75460#p75460" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-09-18T16:37:17Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=75460#p75460</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=73987#p73987" />
			<content type="html"><![CDATA[<p>Для получения знаний о бесполезной мороке? <img src="//forum.script-coding.com/img/smilies/smile.png" width="15" height="15" /> Извините, я в этом смысла не вижу.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-07-22T11:58:16Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=73987#p73987</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=73984#p73984" />
			<content type="html"><![CDATA[<p>Мне, для получения знаний исходя из примера. Тем более пригодится в тех случаях когда Loop, Read работать небудет</p>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-07-22T11:20:49Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=73984#p73984</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=73983#p73983" />
			<content type="html"><![CDATA[<p>Но если Loop, Read работает, то зачем бинарное чтение? Это лишняя морока.</p>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-07-22T11:16:23Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=73983#p73983</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=73982#p73982" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[serzh82saratov]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=27879</uri>
			</author>
			<updated>2013-07-22T10:46:13Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=73982#p73982</id>
		</entry>
		<entry>
			<title type="html"><![CDATA[Re: AHK: Извлечь символы utf-8]]></title>
			<link rel="alternate" href="https://forum.script-coding.com/viewtopic.php?pid=73974#p73974" />
			<content type="html"><![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>]]></content>
			<author>
				<name><![CDATA[YMP]]></name>
				<uri>https://forum.script-coding.com/profile.php?id=81</uri>
			</author>
			<updated>2013-07-22T05:38:15Z</updated>
			<id>https://forum.script-coding.com/viewtopic.php?pid=73974#p73974</id>
		</entry>
</feed>
