Форум программистов, компьютерный форум, киберфорум
Наши страницы
Basic
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.58/12: Рейтинг темы: голосов - 12, средняя оценка - 4.58
stabud
122 / 49 / 1
Регистрация: 26.10.2012
Сообщений: 84
1

Как кодировать символы в UTF-8 представление для HTML запроса

09.11.2012, 22:21. Просмотров 2182. Ответов 6
Метки нет (Все метки)

Привет всем!

Я читал, что есть решение преобразования на PHP встроенными функциями. Однако мне нужен алгоритм преобразования на бейсике.

Если брать таблицу, то русский символ 'А' в Unicode 0410 а в HTML представлении %d0%90
С помощью функции MultiByteToWideChar мы получаем число 0410 , но как дальше?

Конечно можно сообразить табличку в массиве и по ней кодировать, но может есть решение проще.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.11.2012, 22:21
Ответы с готовыми решениями:

В чем разница между "кодировать в utf-8" и "преобразовать в utf-8"?
Программа Notepad++ может выполнить обе эти операции. Однако, результаты - разные получаются.

программа не хочет кодировать русские символы, принимает за пробелы (пустоту)
Никак не могу разобраться. Программа может закодировать символы только английского алфавита, но...

Представление HTML страницы для Java
Задача состоит в следующем, надо из HTML страницы вытягивать определённую информацию, но информация...

Как сохранить html-страницу в кодировке ANSI (сохраняет только в UTF-8)?
Добрый день! Нужно сохранить страницу в файл в кодировке ANSI. Если открыть страницу в...

PHP - представление символов строки (utf-8) в виде массива значений байт
Здравствуйте друзья. Такая задача. Есть срока (utf-8) из латинских символов, цифр, а также знаков...

6
Казанский
14912 / 6313 / 1721
Регистрация: 24.09.2011
Сообщений: 9,977
09.11.2012, 22:37 2
С другого форума, автор qwerty112
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Function decodeURI(str As String) As String
    Dim ScriptEngine As Object ' ScriptControl
    Dim decoded As String
    Set ScriptEngine = CreateObject("ScriptControl")
    ScriptEngine.Language = "JScript"
    ScriptEngine.AddCode "function decode(str) {return decodeURIComponent(str);}"
    decoded = ScriptEngine.Run("decode", str)
    decodeURI = decoded
End Function
 
Function encodeURI(str As String) As String
    Dim ScriptEngine As Object ' ScriptControl
    Dim encoded As String
    Set ScriptEngine = CreateObject("ScriptControl")
    ScriptEngine.Language = "JScript"
    ScriptEngine.AddCode "function encode(str) {return encodeURIComponent(str);}"
    encoded = ScriptEngine.Run("encode", str)
    encodeURI = encoded
End Function
Код
?encodeURI("абвгд")
%D0%B0%D0%B1%D0%B2%D0%B3%D0%B4

?decodeURI("%D0%B0%D0%B1%D0%B2%D0%B3%D0%B4")
абвгд
Мой вариант оттуда же
Немного по-другому и короче

Visual Basic
1
2
3
4
5
6
Function encodeURI(str As String) As String
With CreateObject("ScriptControl")
    .Language = "JScript"
    encodeURI = .Eval("this").encodeURIComponent(str)
End With
End Function
С decode аналогично.
Если функции будут вызываться много раз, надо сделать объект .Eval("this") статическим и внешним для обеих процедур.
1
locm
2397 / 1061 / 133
Регистрация: 28.10.2011
Сообщений: 3,520
Записей в блоге: 6
09.11.2012, 23:06 3
Цитата Сообщение от stabud Посмотреть сообщение
получаем число 0410 , но как дальше
Это два байта.
Их нужно разложить на два отдельных байта и привести к виду %xx. Функция Str() вам в этом поможет.
1
Pro_grammer
Модератор
6273 / 2363 / 457
Регистрация: 24.04.2011
Сообщений: 4,244
Записей в блоге: 10
10.11.2012, 05:59 4
Цитата Сообщение от stabud Посмотреть сообщение
но может есть решение проще.
Да что может быть проще кодирования по таблице, если нет возможности использовать JScript?
Чистый Бейсик:
PureBasic
1
2
3
4
5
6
7
8
9
10
Procedure.s Decode(String.s)
String=UCase(String)
CyrAl.s="А:Б:В:Г:Д:Е:Ё:Ж:З:И:Й:К:Л:М:Н:О:П:Р:С:Т:У:Ф:Х:Ц:Ч:Ш:Щ:Ъ:Ы:Ь:Э:Ю:Я"
CodHTML.s="90:91:92:93:94:95:81:96:97:98:99:9A:9B:9C:9D:9E:9F:A0:A1:A2:A3:A4:A5:A6:A7:A8:A9:AA:AB:AC:AD:AE:AF"
    Repeat
       SimvolStr+1
          String=ReplaceString(String, StringField(CyrAl, SimvolStr, ":"),"%D0%" + StringField(CodHTML,SimvolStr, ":"))
    Until SimvolStr=33
ProcedureReturn  String
EndProcedure
Правда только преобразует все символы указанной строки в верхний регистр, но это для краткости, расширяется легко.
1
stabud
122 / 49 / 1
Регистрация: 26.10.2012
Сообщений: 84
10.11.2012, 07:39  [ТС] 5
Всем большое спасибо за ответы.

Цитата Сообщение от locm Посмотреть сообщение
Это два байта.
Их нужно разложить на два отдельных байта и привести к виду %xx. Функция Str() вам в этом поможет.
Вот это я и пытался сделать, но что-то недопонимаю. Два байта 04 и 10 ну никак не могу привести к %d0%90. Подскажите если не сложно.
0
Pro_grammer
Модератор
6273 / 2363 / 457
Регистрация: 24.04.2011
Сообщений: 4,244
Записей в блоге: 10
10.11.2012, 09:07 6
Цитата Сообщение от stabud Посмотреть сообщение
Два байта 04 и 10 ну никак не могу привести к %d0%90
Просто вы запутались, ведь Unicode <> UTF-8 Вот кусок таблицы
Unicode let UTF-8
U+0410 А d0 90 CYRILLIC CAPITAL LETTER A
U+0411 Б d0 91 CYRILLIC CAPITAL LETTER BE
U+0412 В d0 92 CYRILLIC CAPITAL LETTER VE
U+0413 Г d0 93 CYRILLIC CAPITAL LETTER GHE
U+0414 Д d0 94 CYRILLIC CAPITAL LETTER DE
U+0415 Е d0 95 CYRILLIC CAPITAL LETTER IE
U+0416 Ж d0 96 CYRILLIC CAPITAL LETTER ZHE
U+0417 З d0 97 CYRILLIC CAPITAL LETTER ZE
U+0418 И d0 98 CYRILLIC CAPITAL LETTER I
U+0419 Й d0 99 CYRILLIC CAPITAL LETTER SHORT I
U+041A К d0 9a CYRILLIC CAPITAL LETTER KA
U+041B Л d0 9b CYRILLIC CAPITAL LETTER EL
U+041C М d0 9c CYRILLIC CAPITAL LETTER EM
U+041D Н d0 9d CYRILLIC CAPITAL LETTER EN
U+041E О d0 9e CYRILLIC CAPITAL LETTER O
U+041F П d0 9f CYRILLIC CAPITAL LETTER PE
U+0420 Р d0 a0 CYRILLIC CAPITAL LETTER ER
U+0421 С d0 a1 CYRILLIC CAPITAL LETTER ES
U+0422 Т d0 a2 CYRILLIC CAPITAL LETTER TE
U+0423 У d0 a3 CYRILLIC CAPITAL LETTER U
U+0424 Ф d0 a4 CYRILLIC CAPITAL LETTER EF
U+0425 Х d0 a5 CYRILLIC CAPITAL LETTER HA
U+0426 Ц d0 a6 CYRILLIC CAPITAL LETTER TSE
U+0427 Ч d0 a7 CYRILLIC CAPITAL LETTER CHE
U+0428 Ш d0 a8 CYRILLIC CAPITAL LETTER SHA
U+0429 Щ d0 a9 CYRILLIC CAPITAL LETTER SHCHA
U+042A Ъ d0 aa CYRILLIC CAPITAL LETTER HARD SIGN
U+042B Ы d0 ab CYRILLIC CAPITAL LETTER YERU
U+042C Ь d0 ac CYRILLIC CAPITAL LETTER SOFT SIGN
U+042D Э d0 ad CYRILLIC CAPITAL LETTER E
U+042E Ю d0 ae CYRILLIC CAPITAL LETTER YU
U+042F Я d0 af CYRILLIC CAPITAL LETTER YA
Как из неё видно, что там и преобразовывать ни чего не надо Просто поставить между байтами %.
1
stabud
122 / 49 / 1
Регистрация: 26.10.2012
Сообщений: 84
10.11.2012, 12:05  [ТС] 7
Еще раз спасибо всем, решил написать небольшой класс , используя табличку. Я думал что может есть WINAPI для преобразования или другой несложный способ. И меня сбила с столку фраза на одном из сайтов, а так же высказанная losm:

Для использования символов кирилицы, сначала каждый символ кириллицы кодируется в Юникоде (UTF-8) в последовательность из двух байтов, а затем каждый байт этой последовательности записывается в шестнадцатеричном представлении:
Я думал действительно можно преобразовать так, но на деле судя по всему прав Pro_grammer. Надо брать таблицу, заносить ее в массив и по ней уже кодировать, раз уж неохота возиться с JScript. Ладно вопрос для закрыт, уже пишу код класса.
0
10.11.2012, 12:05
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.11.2012, 12:05

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Конвертировать html элемент в текстовое представление html
Нужно полученный элемент html - div с классом document превратить html код. То есть получить его...

Символы из кодировки UTF-8
Обнаружил такие вот забавные символы в utf-8, понял что их там много и хотел при помощи цикла for...

XmlSerializer.Serialize() как поменять кодировку с UTF-16 на UTF-8
Задача серилизовать объект в string, но с кодировкой UTF-8. подзадача - как представить строку как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.