1

Тема: AHK: Перекодировка содержимого переменной

Приветствую. Переменная содержит строку следующего характера:

 Переданные вами параметры неверны

Как посредством AHK преобразовать данную строку в нормальный текст?

2

Re: AHK: Перекодировка содержимого переменной

Никак вроде.

3

Re: AHK: Перекодировка содержимого переменной

str := "Переданные вами параметры неверны"
VarSetCapacity(var, StrPut(str, "CP0"), 0)
StrPut(str, &var, "CP0")
MsgBox, % StrGet(&var, "UTF-8")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

4

Re: AHK: Перекодировка содержимого переменной

teadrinker, спасибо, тему можно закрывать.

5

Re: AHK: Перекодировка содержимого переменной

Но проще было бы файл, из которого считывается этот текст, сохранить в кодировке UTF-8 с помощью блокнота, и таких проблем не будет.

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

6 (изменено: sanny0112, 2017-02-01 11:13:14)

Re: AHK: Перекодировка содержимого переменной

teadrinker, если бы текст брался из файла, я бы так и сделал. Но я беру его напрямую с сайта, при помощи httpQuery.

7

Re: AHK: Перекодировка содержимого переменной

А там разве нельзя кодировку указать?

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

8

Re: AHK: Перекодировка содержимого переменной

teadrinker, не нашел такого функционала.

9

Re: AHK: Перекодировка содержимого переменной

teadrinker пишет:
str := "Переданные вами параметры неверны"
VarSetCapacity(var, StrPut(str, "CP0"), 0)
StrPut(str, &var, "CP0")
MsgBox, % StrGet(&var, "UTF-8")

Нашел один баг. При первом использовании этот метод работает, но при последующих выдает знаки вопроса. Как это исправить?

10

Re: AHK: Перекодировка содержимого переменной

У меня такого не происходит:

str := "Широкая электрификация южных губерний даст мощный толчок подъёму сельского хозяйства."
VarSetCapacity(var, StrPut(str, "CP0"), 0)
StrPut(str, &var, "CP0")
MsgBox, % StrGet(&var, "UTF-8")

str := "Переданные вами параметры неверны"
VarSetCapacity(var, StrPut(str, "CP0"), 0)
StrPut(str, &var, "CP0")
MsgBox, % StrGet(&var, "UTF-8")
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

11

Re: AHK: Перекодировка содержимого переменной

Попробуйте в таком виде:

str := "Переданные вами параметры неверны"
MsgBox, % Decoding(str, "UTF-8")

Decoding(text, from, to = "CP0")  {
   VarSetCapacity(var, StrPut(text, to)*((to = "utf-16" || to = "cp1200") ? 2 : 1), 0)
   StrPut(text, &var, to)
   Return StrGet(&var, from)
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

12 (изменено: sanny0112, 2017-02-05 16:43:33)

Re: AHK: Перекодировка содержимого переменной

Спасибо.

13

Re: AHK: Перекодировка содержимого переменной

А как конвертировать содержимое переменной из файла, который может быть закодирован в ANSI, UTF-8 или UTF-16? Можно ли универсально читать такие файлы и приводить их содержимое в UTF-8? Пробовал на следующих примерах, но тут к каждой кодировке нужны свои подходы и она должна быть заранее известна —


text_file = %A_ScriptDir%\win.html

FileRead, text, %text_file%
;FileRead, text, *P65001 %text_file%  ;прочитать UTF-8 файл

text := ConvertToHtml(text)
msgbox % text

text := Decoding(text, "UTF-8")
msgbox % text

text := ComUnHTML(text)
msgbox % text


Decoding(text, from, to = "CP0")  {
   VarSetCapacity(var, StrPut(text, to)*((to = "utf-16" || to = "cp1200") ? 2 : 1), 0)
   StrPut(text, &var, to)
   Return StrGet(&var, from)
}

ComUnHTML(html) {
	oHTML := ComObjCreate("HtmlFile")
	oHTML.write(html)
	return oHTML.documentElement.outerhtml
}

ConvertToHtml(str2htm)  {
   Loop, parse, str2htm
   {
      if AnsiTestChar(A_LoopField)
         htmlStr .= A_LoopField
      else  {
         Transform, out, HTML, % A_LoopField, 2
         htmlStr .= out
      }
   }
   Return htmlStr
}

AnsiTestChar(char)  {
   VarSetCapacity(buff, 1, 0)
   StrPut(char, &buff, "cp0")
   Return StrGet(&buff, "cp0") == char
}