Ломаю голову, как получить бинарный URL при использовании юникодных символов, например русских.
Если я использую переводчик с текстом "привет", то получаю следующую ссылку
https://translate.google.ru/?sl=auto&tl=en&text=%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82&op=translate
где %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82 это бинарное представление текста (в GHex так выглядит файл), то есть из 6 символов я получаю 12 байт, каждый отдельно с префиксом % у меня выдаёт %3F%04%40%04%38%04%32%04%35%04%42%04
Исходный пример я брал из пользовательской библиотеки AutoIt3. Когда то делал переводчик и всё работало. Там конечно функции другие но смысл тот же, если буква отличается от англоязычной то преобразуем её в бинарный, примерно так это выглядит:
"%" & Hex(Asc($Arr[$i]), 2).
EnableExplicit
Procedure StrToArrLetter(Array Arr.s{1}(1), String$)
Protected LenStr, i
LenStr = Len(String$)
If LenStr
ReDim Arr(LenStr - 1)
PokeS(Arr(), String$, -1, #PB_String_NoZero)
EndIf
ProcedureReturn
EndProcedure
Procedure.s URLToHex(URL$)
Protected Dim Arr.s{1}(0), out$, i
StrToArrLetter(Arr(), URL$)
For i = 0 To ArraySize(Arr())
If FindString("qwertyuiopasdfghjklzxcvbnm.-_", Arr(i), 1, #PB_String_NoCase)
out$ + Arr(i)
Else
; out$ + "%" + RSet(Hex(Asc(Arr(i)), #PB_Unicode), 4, "0")
out$ + "%" + RSet(Hex(PeekA(@Arr(i)), #PB_Byte), 2, "0")
out$ + "%" + RSet(Hex(PeekA(@Arr(i) + 1), #PB_Byte), 2, "0")
; пробовал комбинации PeekB, #PB_Ascii для Hex, всё одно
EndIf
Next
ProcedureReturn out$
EndProcedure
Define text$ = "привет"
text$ = URLToHex(text$)
Debug text$Отредактировано AZJIO (22.07.2021 03:24:55)