Вверх ↑
Этот топик читают: Гость
Ответов: 15
Рейтинг: 1
#1: 2015-07-25 15:32:11 ЛС | профиль | цитата
Привет всем. Можно ли декодировать русский текст из Base64 c помощью элемента Charset?
------------ Дoбавленo в 15.32:
Если не там задал вопрос извиняюсь.
карма: 1

1
Голосовали:Vadimluk1
Ответов: 1926
Рейтинг: 172
#2: 2015-07-25 16:39:22 ЛС | профиль | цитата
beorn_n, так попробуйте! Вот если не получится, можете писать здесь и спрашивать решение проблемы.
карма: 9
0
Ответов: 15
Рейтинг: 1
#3: 2015-07-25 17:30:37 ЛС | профиль | цитата
Если бы у меня получилось я бы не стал задавать вопрос. Английские слова декодируются нормально, русские неккоректно.
карма: 1

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#4: 2015-07-25 19:14:56 ЛС | профиль | цитата
Оригинально. А где примеры некорректной работы вместе с тем текстом, который не декодируется
карма: 22

0
Ответов: 100
Рейтинг: -1
#5: 2015-07-26 01:26:05 ЛС | профиль | цитата
Ну так можно русский в URL а потом уже в BASE64
карма: 0

0
Ответов: 4628
Рейтинг: 749
#6: 2015-07-26 17:29:12 ЛС | профиль | цитата
beorn_n писал(а):
Английские слова декодируются нормально, русские некорректно
Сразу можно предполагать наличие UTF-8. На выходе Charset с BASE64_WIN ставь ещё один с UTF-8_ANSI.
А схему с ошибкой что, сложно выложить?
карма: 26

0
Ответов: 4628
Рейтинг: 749
#7: 2016-12-01 13:55:24 ЛС | профиль | цитата
У меня нет слов. Я тут глянул на функции кодирования/декодирования Base64 - как можно строку размером в 500 кб обрабатывать 40 секунд на среднем компьютере (90 с. на слабом, 25 с. на мощном)?

В этом архиве - переработанные функции Base64 и демонстрация быстродействия. Тест выполняется до 3-х минут.

Разница в скорости - не в десятки процентов, не в пару раз, а в 60 ТЫСЯЧ раз! Так писать код надо уметь.
Там же есть функция Base64_CodeNew - пример как нужно было реализовать эту функцию изначально.

Результаты тестов на слабом компьютере:

Оригинальная Base64_Code: 
- объём задачи: 0.5 Мб
- время выполнения: 91.313 с
- примерная скорость: 0.00547 МБ/с
Усовершенствованная Base64_Code:
- объём задачи: 2000 Мб
- время выполнения: 25.219 с
- примерная скорость: 79.305 МБ/с
Новая StrToBase64:
- объём задачи: 2000 Мб
- время выполнения: 5.734 с
- примерная скорость: 348.796 МБ/с
Новая Base64ToStr:
- объём задачи: 2000 Мб
- время выполнения: 7.453 с
- примерная скорость: 268.348 МБ/с

Если никаких возражений не будет - там же в архиве поправленный компонент Charset:
- модифицированы функции преобразования строк
- добавлены функции работы с произвольным буфером, а не только строками
- добавлено событие onError (скрытая) - при декодировании Base64 выдаёт ошибку, если во входной строке обнаружены недопустимые символы или неправильная длина строки. В старом компоненте такие строки обрабатывались по-тихому, что не позволяло автору схемы быстро понять, что он подал на компонент неправильные данные. Можно и в остальные методы добавить контроль ошибок.

Редактировалось 6 раз(а), последний 2016-12-01 15:54:16
карма: 26

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#8: 2016-12-01 14:10:43 ЛС | профиль | цитата
Netspirit писал(а):
- модифицированы функции преобразовани строк
- добавлены функции работы с произвольным буфером, а не только строками

Это к чему относится, к Base64 или ко всему, я не нашел каких-либо изменений кода на методы, отличные от Base64.

--- Добавлено в 2016-12-01 14:18:15

Netspirit писал(а):
Результаты тестов на слабом компьютере

Че за комп хоть?. У меня тоже не i3-i7, но результат в два раза выше по всем параметрам.

Редактировалось 1 раз(а), последний 2016-12-01 14:18:15
карма: 22

0
Ответов: 4628
Рейтинг: 749
#9: 2016-12-01 14:33:04 ЛС | профиль | цитата
nesco писал(а):
Че за комп хоть?
AMD Athlon 64 X2 4800+ 2.5 ГГц. На Pentium IV 541 3.2 ГГц не многим лучше.

nesco писал(а):
Это к чему относится, к Base64 или ко всему
Только к Base64.
Комментарии в коде не стоит удалять - HiAsm часто служит учебным пособием, и они бывают полезны.

Редактировалось 2 раз(а), последний 2016-12-01 15:12:05
карма: 26

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#10: 2016-12-01 15:21:33 ЛС | профиль | цитата
Добавил изменения.
карма: 22

0
Ответов: 4628
Рейтинг: 749
#11: 2016-12-01 15:27:39 ЛС | профиль | цитата
Ну, быстрый! А я тут небольшую ошибочку нашел в функции Base64_Decode при недопустимом символе и перезалил архив. Выложи ещё раз hiCharset.pas.

Редактировалось 1 раз(а), последний 2016-12-01 15:27:52
карма: 26

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#12: 2016-12-01 16:17:27 ЛС | профиль | цитата
Netspirit писал(а):
Выложи ещё раз hiCharset.pas

Перезалил
карма: 22

0
Ответов: 4628
Рейтинг: 749
#13: 2016-12-01 16:25:18 ЛС | профиль | цитата
Спасибо.
карма: 26

0
Ответов: 233
Рейтинг: 12
#14: 2017-04-04 13:56:53 ЛС | профиль | цитата
Добрый день! Помогите пожалуйста перевести картинку с диска в BASE64... че-то никак не пойму как это сделать
карма: 2

0
Разработчик
Ответов: 26113
Рейтинг: 2126
#15: 2017-04-04 14:21:31 ЛС | профиль | цитата
Iliya писал(а):
Помогите пожалуйста перевести картинку с диска в BASE64...


Схема


Add(MainForm,2953706,105,161)
{
Width=489
Position=1
}
Add(ODialog,6607378,161,203)
{
Filter="All Image Files|*.bmp;*.gif;*.ico;*wmf;*.emf;*.tif;*.png;*.jpg;*.jpeg|BMP (*.bmp)|*.bmp|JPG (*.jpg, *.jpeg)|*.jpg;*.jpeg|GIF (*.gif)|*.gif|TIFF (*.tif)|*.tif|PNG (*.png)|*.png|ICO (*.ico)|*.ico|EMF (*.emf)|*.emf|WMF (*.wmf)|*.wmf|All files (*.*)|*.*"
FileName=""
link(onExecute,9459066:doEvent1,[])
}
Add(Button,606307,105,203)
{
Left=205
Top=230
TabOrder=-1
Caption="Load"
link(onClick,6607378:doExecute,[])
}
Add(Memo,3710708,420,182)
{
Left=10
Top=5
Width=455
Height=215
ScrollBars=2
}
Add(StreamConvertor,5744430,301,203)
{
Mode=6
Point(Data)
link(onResult,7947916:doCharset,[])
}
Add(Charset,7947916,357,203)
{
Type=5
link(onCharset,3710708:doText,[])
}
Add(FileStream,13114923,245,203)
{
link(onLoad,5744430:doConvert,[])
}
Add(Hub,9459066,210,203)
{
link(onEvent1,13114923:doOpen,[])
link(onEvent2,13114923:doClose,[])
}

карма: 22

1
Голосовали:Iliya
Сообщение
...
Прикрепленные файлы
(файлы не залиты)