Тема: AHK: Замена в тексте английских символов на русские
Помогите пожалуйста.
Нашел как заменять английские символы на русские, НО происходит какой-то баг.
Заменяет все символы хорошо, кроме первого большого символа, он ее заменяет на маленькую русскую букву почему-то. Короче заменяет все большие символы на маленькие.
В HEX'e:
английская P = 50
английская p = 70
русская P = D0
русская p = F0
То есть по хексу первая буква была 50(БОЛЬШАЯ англ P), а стала после замены F0(маленькая рус Р).
То есть:
rus := "Растение" ; Слово полностью написано русскими символами
eng := "Pacтeниe" ; Тут буквы "P", "a", "c" два "е" написаны анлийскими символами
; Если просто читать то слова одинаковы, но в хексе разные
rush := StringToHex(rus)
engh := StringToHex(eng)
msgbox, rus: %rus%`nHEX rus: %rush%`neng: %eng%`nHEX eng: %engh% ; показывает в хексе символы
for s, r in {A:"А", a:"а", E:"Е", e:"е", T:"Т", O:"О", o:"о", P:"Р", p:"р", H:"Н", K:"К", k:"к", X:"Х", x:"х", C:"С", c:"с", B:"В", M:"М"} ; слева символ на английском, справа после двоеточия на русском
StringReplace, eng, eng, % s, % r, All ; делает замену
engh := StringToHex(eng)
msgbox, rus: %rus%`nHEX rus: %rush%`neng: %eng%`nHEX eng: %engh%
; видно что заменятся и хекс одинаковый, кроме первой буквы. Первая буква становится маленькой
StringToHex(String)
{
local Old_A_FormatInteger, CharHex, HexString
;Return '0' if the string was blank
If !String
Return 0
;Save the current Integer format
Old_A_FormatInteger := A_FormatInteger
;Set the format of integers to their Hex value
SetFormat, INTEGER, H
;Parse the String
Loop, Parse, String
{
;Get the ASCII value of the Character (will be converted to the Hex value by the SetFormat Line above)
CharHex := Asc(A_LoopField)
;Comment out the following line to leave the '0x' intact
StringTrimLeft, CharHex, CharHex, 2
;Build the return string
HexString .= CharHex . " "
}
;Set the integer format to what is was prior to the call
SetFormat, INTEGER, %Old_A_FormatInteger%
;Return the string to the caller
Return HexString
}