Какую кодировку я должен использовать для преобразования NSData в NSString и обратно, если строка не должна быть красивой? - PullRequest
2 голосов
/ 20 июня 2011

Cheers,

моему приложению необходимо отправить содержимое объекта NSData на веб-сервер в качестве параметра запроса GET.Он должен иметь возможность получать те же самые данные позже.Данные будут храниться в виде длинного текста в базе данных mysql, содержимое мне неизвестно и может быть чем угодно.

Для этого мне нужно преобразовать его в строку NSString, но в какойя должен выбрать?Имеет ли значение вообще, какой из них я выберу, если он одинаков для обоих способов?

Спасибо !!

Ответы [ 3 ]

3 голосов
/ 20 июня 2011

Если вам действительно нужно преобразовать ваши данные в строку, используйте кодировку Unicode, так как Unicode предоставляет кодовую точку для каждого возможного символа. Наиболее распространенная кодировка Unicode, очевидно, UTF-8 (NSUTF8StringEncoding)

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

Вместо этого, если вам нужно перенести некоторые необработанные данные на ваш сервер, подумайте:

  • Использование POST вместо GET, если возможно
  • Кодируйте ваши данные в Base64 , так что вы гарантируете, что не потеряете никакие данные при преобразовании или во время транспортировки с вашего клиента на ваш сервер (или, что еще хуже, повредите ваши данные, преобразовав их в произвольный кодирование)
  • Если возможно на вашем сервере (если он ваш и у вас есть доступ к коду), декодируйте строку в кодировке Base64 обратно в необработанные данные при получении и сохраняйте ее в поле BLOB вместо в поле VARCHAR или BIGTEXT.
  • Если вы не можете получить доступ к коду сервера и не можете сохранить его в поле TEXT / VARCHAR в вашей базе данных, вы все равно можете сохранить строку в кодировке Base64, представляющую ваши данные, непосредственно в вашей базе данных (и декодировать ее). когда вы получите его из БД позже).

См. Google для кодировки Base64 в Objective C, есть много ссылок на широко используемую категорию NSString + Base64.

1 голос
/ 20 июня 2011

Для этого следует использовать кодировку Base -64.Подробности см. В этом ответе / код:

Как выполнить кодирование base64 на iphone-sdk?

Параметры запросов GET должны быть строками, а вВ идеальном (наиболее совместимом) мире они полностью экранированы 7-битным ASCII.Взяв произвольные данные и зашифровав их одним из традиционных кодировок строки Unicode, чтобы поместить их в URL, вы столкнетесь с различными проблемами и загадочными ошибками.

Base-64 предназначен для строкового кодирования данных <=>.(В отличие от строкового <=> строкового кодирования.)

0 голосов
/ 20 июня 2011

Пока вы используете одинаковую кодировку, у вас все должно быть хорошо.Для большинства целей UTF-8 хорош.NSUTF8StringEncoding

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...