1

Тема: AHK: Скачивание в определенной кодировке

Как скачать страницу в корректной кодировке, чтобы слово «Stihotvoreniâ» отображалось, как на сайте — «Stihotvoreniâ»?


HTTP := ComObjCreate("WinHTTP.WinHTTPRequest.5.1")
HTTP.Open("GET", "https://polona.pl/api/entities/MTE5NzAzNTE3/?add_history_event=true", true)
HTTP.SetRequestHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36")
HTTP.SetRequestHeader("Pragma", "no-cache")
HTTP.SetRequestHeader("Cache-Control", "no-cache, no-store")
HTTP.SetRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT")
HTTP.Send()
HTTP.WaitForResponse()
MsgBox % HTTP.ResponseText

2

Re: AHK: Скачивание в определенной кодировке

Смотрите примеры с ResponseBody.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ DD

3

Re: AHK: Скачивание в определенной кодировке

http://forum.script-coding.com/viewtopic.php?id=14491.

4

Re: AHK: Скачивание в определенной кодировке

Как задать скачивание, чтобы выводимое слово отобразилось как на сайте?

   url := "https://www.bl.uk/catalogues/illuminatedmanuscripts/record.asp?MSID=2611"
   HTTP := ComObjCreate("Msxml2.XMLHTTP.6.0")
   HTTP.Open("GET", url, 0)
   HTTP.Send()
   body := HTTP.ResponseBody
   pdata := NumGet(ComObjValue(body) + 8 + A_PtrSize)
   length := body.MaxIndex() - body.MinIndex() + 1
   RTxt := StrGet(pdata, length, "utf-8")

   RTxt := RegExReplace(RTxt, "is)^.*nella sua(.*?),.*$", "$1")

   msgbox % RTxt

5

Re: AHK: Скачивание в определенной кодировке

Кодировку правильную подобрать, наверно.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6 (изменено: DD, 2021-01-11 03:06:05)

Re: AHK: Скачивание в определенной кодировке

Оказывается, я пробовал правильно, указывая "CP28591", но при попытке сохранить такой текст в файл, кодировка слетала. Как сохранить в исходной кодировке? А лучше прежде преобразовать в utf-8?

7 (изменено: teadrinker, 2021-01-11 03:26:45)

Re: AHK: Скачивание в определенной кодировке

В исходной кодировке можно прямо из буфера:

url := "https://www.bl.uk/catalogues/illuminatedmanuscripts/record.asp?MSID=2611"
HTTP := ComObjCreate("Msxml2.XMLHTTP.6.0")
HTTP.Open("GET", url, 0)
HTTP.Send()
body := HTTP.ResponseBody
pdata := NumGet(ComObjValue(body) + 8 + A_PtrSize)
length := body.MaxIndex() - body.MinIndex() + 1

filePath := A_Desktop . "\site.html"
File := FileOpen(filePath, "w", "cp0")
File.RawWrite(pdata + 0, length)
File.Close()

Ну, или так:

URLDownloadToFile, https://www.bl.uk/catalogues/illuminatedmanuscripts/record.asp?MSID=2611, % A_Desktop . "\site.html"

Преобразовать можно с помощью StrPut, StrGet.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Скачивание в определенной кодировке

А как правильно вписать преобразование?

StrPut(vText, &vTemp, "CP28591")
s := StrGet(&vTemp, "UTF-8") 

9

Re: AHK: Скачивание в определенной кодировке

Не, обманул, после

RTxt := StrGet(pdata, length, "cp28591")

у вас уже есть текст в переменной. Осталось его только в UTF-8 в файл записать.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder
+ DD

10 (изменено: DD, 2021-01-11 06:22:12)

Re: AHK: Скачивание в определенной кодировке

По предыдущей ссылке норм кодирует, — но почему по этой перед текстом «The Allegorical Menorah», квадрат возникает? —

url := "https://www.bl.uk/catalogues/illuminatedmanuscripts/record.asp?MSID=3"
HTTP := ComObjCreate("Msxml2.XMLHTTP.6.0")
HTTP.Open("GET", url, 0)
HTTP.Send()
body := HTTP.ResponseBody
pdata := NumGet(ComObjValue(body) + 8 + A_PtrSize)
length := body.MaxIndex() - body.MinIndex() + 1
RTxt := StrGet(pdata, length, "cp28591")
FileAppend, %RTxt%`n, %A_Desktop%\_tmp.html, UTF-8

11

Re: AHK: Скачивание в определенной кодировке

Там разве в StrGet не cp1251 должно быть.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

12

Re: AHK: Скачивание в определенной кодировке

Но тогда по этой ссылке слетит кодировка с «£» и «é». Вроде, проблема возникает со знаками «» и «». Как правильно их менять на каком-то этапе?


      StringReplace, body, body, ’, ', All
      StringReplace, body, body, ‘, ', All

13

Re: AHK: Скачивание в определенной кодировке

DD пишет:

StrPut(vText, &vTemp, "CP28591")

serzh82saratov пишет:

Там разве в StrGet не cp1251 должно быть.

А как вы это определили?
Хром кодирует в "windows-1252".
document.characterSet в консоли.

14

Re: AHK: Скачивание в определенной кодировке

Как то опечатался, наверняка я думал про Западно-Европейскую, а не про кириллицу.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

15

Re: AHK: Скачивание в определенной кодировке

Кодировка указана в заголовке HTML: charset=iso-8859-1.

Википедия пишет:

В проекте стандарта HTML 5 предписывается показывать ISO-8859-1 как Windows-1252

MSDN пишет:

28591 iso-8859-1 ISO 8859-1 Latin 1; Western European (ISO)

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

16

Re: AHK: Скачивание в определенной кодировке

CP1252 работает наоборот — те англ. кавычки сохраняет, а диакритику нет.

17 (изменено: serzh82saratov, 2021-01-11 21:25:18)

Re: AHK: Скачивание в определенной кодировке


url := "https://www.bl.uk/catalogues/illuminatedmanuscripts/record.asp?MSID=240"
HTTP := ComObjCreate("Msxml2.XMLHTTP.6.0")
HTTP.Open("GET", url, 0)
HTTP.Send()
body := HTTP.ResponseBody
pdata := NumGet(ComObjValue(body) + 8 + A_PtrSize)
length := body.MaxIndex() - body.MinIndex() + 1
RTxt := StrGet(pdata, length, "cp1252")
FileDelete %A_Desktop%\_tmp.html
FileAppend, %RTxt%`n, %A_Desktop%\_tmp.html, cp1252
run %A_Desktop%\_tmp.html

По какой ссылке кавычек нет?

teadrinker пишет:

В проекте стандарта HTML 5 предписывается показывать ISO-8859-1 как Windows-1252

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

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui
+ DD

18

Re: AHK: Скачивание в определенной кодировке

Если сайт был создан, когда HTML 5 уже появился, значит они должны были рассчитывать на отображение в cp1252, если раньше — то наверно на cp28591.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

19

Re: AHK: Скачивание в определенной кодировке

Вот я и говорю кино и немцы.
Помимо "если и значит", надо ввести новый оператор "наверно", тогда все вопросы информатики закончатся. )

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.33.09 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui