Как преобразовать строки Unicode (\ u00e2 и т. Д.) В NSString для отображения? - PullRequest
3 голосов
/ 14 мая 2010

Я пытаюсь поддерживать произвольный Unicode от различных международных пользователей. Они уже поместили кучу данных в базы данных sqlite на своих iPhone, и теперь я хочу записать данные в базу данных, а затем отправить их обратно на свое устройство. Прямо сейчас я использую страницу php, которая отправляет данные обратно из интернет-базы данных mysql. Данные сохраняются в базе данных mysql должным образом, но когда они отправляются обратно, они выводятся в виде текста в кодировке Unicode, например

Фрэнк iPad

вместо

Фрэнк iPad

где апостроф действительно должен быть кудрявым апострофом.

Ответ, опубликованный на другой вопрос , указывает, что нет встроенных методов Какао для преобразования части «\ u00e2 \ u0080 \ u0099» строки Юникода с веб-сервера в объект NSString. Это правильно?

Это кажется действительно удивительным (и пугающе разочаровывающим), поскольку Cocoa определенно позволяет вводить множество различных символов Юникода, и мне нужно поддерживать любой произвольный язык, о котором я никогда не слышал, и все возможные символы. Теперь я прекрасно сохраняю их в локальной базе данных sqlite и из нее, но как только я отправлю ее на веб-сервер, а затем, возможно, получу другие данные, я хочу убедиться, что данные, полученные с веб-сервера, правильно отформатированы.

Ответы [ 3 ]

5 голосов
/ 23 июля 2012

[...] нет встроенных методов Какао для преобразования [...]. Это исправить?

Это не правильно.

Возможно, вас заинтересует CFStringTransform и его возможности. Это полноценный механизм преобразования ICU, который может (также) выполнить запрошенное преобразование.

См. Использование Objective C / Какао для удаления символов Unicode, например \ u1234

2 голосов
/ 15 мая 2010

Все строки NSS являются Unicode.

Проблема с данными «Frank\u00e2\u0080\u0099s iPad» не в том, что это Unicode;это то, что он сбежал в ASCII.«Frank’s iPad» является допустимым Unicode в любом UTF, и это то, что вам нужно.

Итак, вам нужно посмотреть, возвращает ли база данных экранированные данные или экранирующий их слой PHP в какой-то момент.Если это так, исправьте, если можете;Ресурс PHP должен возвращать UTF-8/16/32.Только если этот подход не удался, вы можете попытаться удалить строку со стороны Какао.

Вы правы, что в Какао нет встроенного способа удаления строки.Если вы дойдете до этого, посмотрите, сможете ли вы найти какой-нибудь открытый код для этого;если нет, то вам нужно сделать это самостоятельно, возможно, используя NSScanner.

0 голосов
/ 12 октября 2011

Убедитесь, что ваш ответ веб-службы имеет тип контента и кодировку.Также, что в xml указана кодировка.В PHP необходимо добавить следующее перед печатью XML:

header ('Content-type: text / xml; charset = UTF-8');Распечатать '';

Полагаю, кодировка не указана.

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