PureBasic - форум

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » PureBasic - форум » Вопросы по PureBasic » URLToHex


URLToHex

Сообщений 1 страница 3 из 3

1

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

0

2

AZJIO написал(а):

где %D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82 это бинарное представление текста

В Пурике уже есть встроенная функция

Код:
Debug URLEncoder("привет")
Debug URLDecoder("%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82") ; привет

+1

3

Текст в кодировке UTF-8.

Код:
Structure ArrA
  a.a[0]
EndStructure

*p.ArrA = UTF8("привет")

If *p
  
  ShowMemoryViewer(*p, MemorySize(*p))
  
  Size=MemorySize(*p)-2
  For i=0 To Size
    s.s+"%"+Hex(*p\a[i], #PB_Ascii)
  Next
  
  Debug s
  
  FreeMemory(*p)
  
EndIf

+1


Вы здесь » PureBasic - форум » Вопросы по PureBasic » URLToHex