Данные большого двоичного объекта заменяют » » пробелом

#iphone #mysql #character-encoding #blob

#iPhone #mysql #кодировка символов #большой двоичный объект

Вопрос:

У меня есть приложение для iphone, которое преобразует изображение в NSData, а затем преобразует в строку в кодировке base64.

Когда эта закодированная строка отправляется на сервер в базе данных сервера, при хранении на сервере ‘ ‘ преобразуется в ‘пробел’, и поэтому декодер не работает должным образом.

Я предполагаю, что проблема связана с кодировкой таблицы по умолчанию в базе данных. В настоящее время это латиница, я попытался изменить ее на UTF8, но проблема все еще сохраняется.

Любая другая кодировка, пожалуйста, помогите

Ответ №1:

Конечно, это не имеет никакого отношения к кодированию. Именно формат POST параметров GET и создает конфликт с base64. В http://en.wikipedia.org/wiki/Base64#Variants_summary_table вы видите альтернативы, которые предназначены для того, чтобы заставить base64 работать с URL-адресами и т.д.

Одним из этих вариантов является «Base64 с безопасным алфавитом URL и имени файла (кодировка RFC 4648 ‘base64url’)», который заменяет with - и / with _ .

Другой альтернативой было бы заменить символы-нарушители /= их соответствующими шестнадцатеричными представлениями на %xx — но это делает данные излишне длинными.

Комментарии:

1. : Итак, что я должен делать? Я должен изменить логику кодирования или я должен преобразовать эту закодированную строку в строку с кодировкой url, чтобы быть уверенным, что универсальный декодер, такой как openssl, может декодировать мои отправленные данные?

2. Вы можете выполнить любой из них, в зависимости от того, что у вас есть на принимающей стороне. Замена довольно проста, а также urlencoding — делайте то, что вам больше подходит.