Тема: AHK: Перекодировка содержимого переменной
Приветствую. Переменная содержит строку следующего характера:
Переданные вами параметры неверны
Как посредством AHK преобразовать данную строку в нормальный текст?
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Приветствую. Переменная содержит строку следующего характера:
Переданные вами параметры неверны
Как посредством AHK преобразовать данную строку в нормальный текст?
Никак вроде.
str := "Переданные вами параметры неверны"
VarSetCapacity(var, StrPut(str, "CP0"), 0)
StrPut(str, &var, "CP0")
MsgBox, % StrGet(&var, "UTF-8")
teadrinker, спасибо, тему можно закрывать.
Но проще было бы файл, из которого считывается этот текст, сохранить в кодировке UTF-8 с помощью блокнота, и таких проблем не будет.
teadrinker, если бы текст брался из файла, я бы так и сделал. Но я беру его напрямую с сайта, при помощи httpQuery.
А там разве нельзя кодировку указать?
teadrinker, не нашел такого функционала.
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")
str := "Переданные вами параметры неверны"
VarSetCapacity(var, StrPut(str, "CP0"), 0)
StrPut(str, &var, "CP0")
MsgBox, % StrGet(&var, "UTF-8")
Попробуйте в таком виде:
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)
}
Спасибо.
А как конвертировать содержимое переменной из файла, который может быть закодирован в 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
}
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться