Что нового

[Данные, строки] Запись в UTF-8

ArgoNaft

Новичок
Сообщения
129
Репутация
0
Читал я тут темы, пример одой из них:
http://autoit-script.ru/index.php/topic,6034.0.html
Не пишет он в UTF-8, да формат файла в UTF-8, но не делает он запись у меня именно в этом формате. Там есть книга: Les Misérables а записывается она как Les Misйrables. Возможно читает _INetGetSource не в кодировке UTF-8, но я посмотрел там нет доп опций не каких.
Пробовал через браузер, но там вообще, что то не чего он не пишет

Код:
#Include<Array.au3>
#include <IE.au3>
;#include "INET.au3"
$file_base = FileOpen("url.txt", 128+1)
$url = "http://manybooks.net/statistics.php"
$oIE = _IECreate ($url, 0, 0)
$sHTML = _IEDocReadHTML ($oIE)
;$sHTML = _INetGetSource($url)
$sPatern_url = '<a href=\"\/titles\/(.*)\.html\">.*<\/a> <em>'
$sPatern_name = '<a href=\"\/titles\/.*\.html\">(.*)<\/a> <em>'
$aResult_url = StringRegExp( $sHTML, $sPatern_url, 3,1 )
$aResult_name = StringRegExp( $sHTML, $sPatern_name, 3,1 )
;_ArrayDisplay($aResult_name,"$aResult_name")

For $i = 0 To Ubound($aResult_url) -1
   FileWriteLine($file_base, $aResult_url[$i]&"|"&$aResult_name[$i])
Next


И сразу уж тогда вопрос :smile: есть ли аналог explode и implode ... :smile:
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Есть _StringExplode в справке.

Код:
#include<Array.au3>
#include <IE.au3>

FileChangeDir(@ScriptDir)
$url = "http://manybooks.net/statistics.php"
$sPath = @ScriptDir & '\url.txt'
$sPathTmp = @TempDir & "\update.dat"

InetGet($url, $sPathTmp, 1)
$sHTML = FileRead($sPathTmp)
MsgBox(0, 'Сообщение', $sHTML)
$sPatern_url = '<a href=\"\/titles\/(.*)\.html\">.*<\/a> <em>'
$sPatern_name = '<a href=\"\/titles\/.*\.html\">(.*)<\/a> <em>'
$aResult_url = StringRegExp($sHTML, $sPatern_url, 3, 1)
$aResult_name = StringRegExp($sHTML, $sPatern_name, 3, 1)
_ArrayDisplay($aResult_name, "$aResult_name")

$hFile = FileOpen($sPath, 128 + 1)
For $i = 0 To UBound($aResult_url) - 1
	FileWriteLine($hFile, $aResult_url[$i] & "|" & $aResult_name[$i])
Next
FileClose($hFile)
 
Автор
A

ArgoNaft

Новичок
Сообщения
129
Репутация
0
и это реально надо делать все, чтоб всего лишь отработать с кодировкой в UTF-8? :shok:
А можно пояснить что это таое
Код:
$sPathTmp = @TempDir & "\update.dat"

понимаю что Temp, но update.dat вот это что такое
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
еще есть
Код:
InetRead
которая вернет в бинарном виде, а затем, если нужно получить строку, есть
Код:
BinaryToString
в которой можно указать в какой кодировке данные. Ну и конечно, мне кажется (надо проверять :smile:), можно сразу открыть файл с флагом 16 и записать то что пришло через InetRead
 
Автор
A

ArgoNaft

Новичок
Сообщения
129
Репутация
0
Код:
#Include<Array.au3>
#include <IE.au3>
;#include "INET.au3"
$file_base = FileOpen("url.txt", 128+1)
$url = "http://manybooks.net/statistics.php"
$sData = InetRead($url,8)
$sHTML = BinaryToString($sData)

;$oIE = _IECreate ($url, 0, 0)
;$sHTML = _IEDocReadHTML ($oIE)
;MsgBox(0, "Document Source", $sHTML)
;$sHTML = _INetGetSource($url)


$sPatern_url = '<a href=\"\/titles\/(.*)\.html\">.*<\/a> <em>'
$sPatern_name = '<a href=\"\/titles\/.*\.html\">(.*)<\/a> <em>'
$aResult_url = StringRegExp( $sHTML, $sPatern_url, 3,1 )
$aResult_name = StringRegExp( $sHTML, $sPatern_name, 3,1 )
;_ArrayDisplay($aResult_name,"$aResult_name")

For $i = 0 To Ubound($aResult_url) -1
   FileWriteLine($file_base, $aResult_url[$i]&"|"&$aResult_name[$i])
Next

FileClose($file_base)


Нет такое не прокатывает тоже, и с флагом 16 тоже
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
почитайте внимательно про BinaryToString и InetRead


Добавлено:
Сообщение автоматически объединено:

И сайт ваш в кодировке charset=iso-8859-1
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Попробуй заменить это:
Код:
$sData = InetRead($url,8)
$sHTML = BinaryToString($sData)

на это:
Код:
$sHTML = BinaryToString(InetRead($url), 4)



Добавлено:
Сообщение автоматически объединено:

И загляни сюда:
http://autoit-script.ru/index.php/topic,510.0.html
 
Автор
A

ArgoNaft

Новичок
Сообщения
129
Репутация
0
Les Misrables ну вот так тогда запишет, пропустить ту самую букву Misérables
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
ArgoNaft сказал(а):
и это реально надо делать все, чтоб всего лишь отработать с кодировкой в UTF-8?
что именно всё? Весь флаг 128?

Код:
#include<Array.au3>
#include <IE.au3>

FileChangeDir(@ScriptDir)
$url = "http://manybooks.net/statistics.php"
$sPath = @ScriptDir & '\url.txt'

$vTest = InetRead($url)
If @error Then Exit MsgBox(0, 'Сообщение', 'Возможно интернет отключен')
$sHTML = BinaryToString($vTest)

MsgBox(0, 'Сообщение', $sHTML)
$sPatern_url = '<a href=\"\/titles\/(.*)\.html\">.*<\/a> <em>'
$sPatern_name = '<a href=\"\/titles\/.*\.html\">(.*)<\/a> <em>'
$aResult_url = StringRegExp($sHTML, $sPatern_url, 3, 1)
$aResult_name = StringRegExp($sHTML, $sPatern_name, 3, 1)
_ArrayDisplay($aResult_name, "$aResult_name")

$hFile = FileOpen($sPath, 128 + 1)
For $i = 0 To UBound($aResult_url) - 1
	FileWriteLine($hFile, $aResult_url[$i] & "|" & $aResult_name[$i])
Next
FileClose($hFile)
 
Автор
A

ArgoNaft

Новичок
Сообщения
129
Репутация
0
нет там надо сначала перекодировать получается из ISO потом уже в файл складывать
http://autoit-script.ru/index.php/topic,510.0.html
а какой функцией тут воспользоваться чтобы перекодировать из ISO в UTF, из заданного списка я не нашел такого.
 
Автор
A

ArgoNaft

Новичок
Сообщения
129
Репутация
0
Код:
$sHTML = _Encoding_StringToUTF8(BinaryToString(InetRead($url), 4))

мыслей как сделать это по другому у меня нет, но это тоже вырезает именно ту букву
 

AZJIO

Меценат
Меценат
Сообщения
2,903
Репутация
1,200
Ещё упрощение

Код:
#include<Array.au3>

FileChangeDir(@ScriptDir) ; избавляет от ошибок запуска из ком-строки
$url = "http://manybooks.net/statistics.php"
$sPath = @ScriptDir & '\url.txt'

$sHTML = InetRead($url)
If @error Then Exit MsgBox(0, 'Сообщение', 'Возможно интернет отключен')
$sHTML = BinaryToString($sHTML)

; MsgBox(0, 'Сообщение', $sHTML)
$aRes = StringRegExp($sHTML, '<a href=\"\/titles\/(.*)\.html\">(.*)<\/a> <em>', 3)
; _ArrayDisplay($aRes, "$aResult_name")

$hFile = FileOpen($sPath, 128 + 1)
For $i = 0 To UBound($aRes) - 1 Step 2
	FileWriteLine($hFile, $aRes[$i] & "|" & $aRes[$i + 1])
Next
FileClose($hFile)
 
Автор
A

ArgoNaft

Новичок
Сообщения
129
Репутация
0
Не записывает он так в UTF, надо перекодировать
Les Misйrables
вот как он пишет
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Значит надо найти перекодировщик :smile:
 
Автор
A

ArgoNaft

Новичок
Сообщения
129
Репутация
0
http://autoit-script.ru/index.php/topic,510.0.html ну вот тут нету ISO в UTF-8 :'(
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Кстати, если вывести этот текст через msgbox, то все нормально, все символы сохраняются. Может ваш "блокнот" не может открыть файл в этой кодировке? Откройте его в любом браузере, и там смотрите.
 
Автор
A

ArgoNaft

Новичок
Сообщения
129
Репутация
0
я его через Notepad++ открываю и там четко написано что UTF-8 кодировка
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
#include <ie.au3>
$hFile = FileOpen('test.html',2 + 128)
$oIE = _IECreate('http://manybooks.net/statistics.php',1)
$oAs = _IETagNameGetCollection($oIE,'a')
For $oA In $oAs
	FileWrite($hFile,$oA.innertext & '
'& @CRLF)
Next
FileClose($hFile)

Ну попробуйте так
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Zaramot
Да, работает, все закорючки наместе, в браузере и в notepad++ с кодировкой utf-8
 
Верх