Ломаю голову, как получить бинарный 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)