Тема: AHK: Смена кодировки текста в переменной
Необходимо сменить кодировку текста в переменной с UTF-8 в ANSI и обратно.
Как это делается?
Рабочая версия AutoHotkey Unicode
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Необходимо сменить кодировку текста в переменной с UTF-8 в ANSI и обратно.
Как это делается?
Рабочая версия AutoHotkey Unicode
А вы уверены, что он там именно в UTF-8? Родная кодировка для строк в юникодном АНК — UTF-16. Но если таки да, т.е. переменная используется просто как буфер, то сначала прочитать StrGet как UTF-8, потом записать StrPut как ANSI. Или наоборот.
Учесть размер буфера, чтобы не вылезти за его пределы (во втором случае).
Может и в UTF-16.
Я не особо понимаю как эти функции использовать: StrGet и StrPut.
Проблема возникает в этом скрипте, который переводит строку в HEX и обратно HEX в строку.
Раньше на версии AutoHotkey ANSI все работало отлично, а теперь на выходе бяки.
StrToHex = Привет Мир!
StrtoHex:
SetFormat, Integer, H
CodeString =
Loop, Parse, StrToHex
{
CharCode := Asc(A_LoopField)
If CharCode < 0x10
CodeString .= "0" . SubStr(CharCode, 3)
Else
CodeString .= SubStr(CharCode, 3)
}
StringUpper, CodeString, CodeString
MsgBox %CodeString%
HextoStr:
HextoStr = %CodeString%
Text =
Pos = 1
Loop, % StrLen(HextoStr) / 2
{
CharCode := "0x" . SubStr(HextoStr, Pos, 2)
Text .= Chr(CharCode)
Pos += 2
}
MsgBox %Text%
return
В Юникоде код символа — это два байта, т.е. в хексе будет 4 символа. С поправкой на это, вроде всё работает.
StrToHex = Привет Мир!
StrtoHex:
SetFormat, Integer, H
CodeString =
Loop, Parse, StrToHex
{
CharCode := Asc(A_LoopField)
CodeString .= SubStr("000" . SubStr(CharCode, 3), -3)
}
StringUpper, CodeString, CodeString
MsgBox %CodeString%
HextoStr:
HextoStr = %CodeString%
Text =
Pos = 1
Loop, % StrLen(HextoStr) // 4
{
CharCode := "0x" . SubStr(HextoStr, Pos, 4)
Text .= Chr(CharCode)
Pos += 4
}
MsgBox %Text%
return
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться