Расшифровка ‘в объекте c

Я сохраняю данные из WebService, и некоторая информация имеет символы ASCII, такие как ‘ или #038;. Вначале я думал, что установка строки с текстом, содержащим подобные символы, будет работать отлично, поскольку есть другие, например акценты \u00f3, которые появляются в декодированном виде в UILabels, но эти 2, например, этого не делают.

Почему это? Я правильно понимаю?

Спасибо.


person subharb    schedule 25.03.2013    source источник
comment
Экраны типа \u00f3 в строковых литералах оцениваются во время компиляции. Если у вас есть данные времени выполнения, в которых есть эти escape-последовательности, они не будут интерпретироваться. И ‘ даже не escape-последовательность; это объект HTML.   -  person Lily Ballard    schedule 26.03.2013


Ответы (1)


Замена HTML-сущностей

Поскольку вы сохраняете данные из веб-службы, вы можете использовать эту категорию NSString для HTML., как описано в этом сообщении: Objective-C: Как заменить HTML сущности?

(Сущности HTML - это такие вещи, как: ‘ - Подробнее в википедии)

В категории доступны следующие методы:

- (NSString *)stringByConvertingHTMLToPlainText;
- (NSString *)stringByDecodingHTMLEntities;
- (NSString *)stringByEncodingHTMLEntities;
- (NSString *)stringWithNewLinesAsBRs;
- (NSString *)stringByRemovingNewLinesAndWhitespace;



Ответ на комментарии

[NSAttributedString initWithHTML: documentAttributes:]

Инициализирует и возвращает новый объект NSAttributedString из HTML, содержащегося в заданном объекте данных.

NSData* htmlData = [yourHTMLString dataUsingEncoding:NSUTF8StringEncoding]
NSAttributedString* theAttributedString = [[NSAttributedString alloc] initWithHTML:htmlData documentAttributes:NULL];

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

#define html2AttributedString(htmlString)                                                                   \
    [[[NSAttributedString alloc] initWithHTML:[(htmlString) dataUsingEncoding:NSUTF8StringEncoding]         \
    documentAttributes:NULL] autorelease]

Использование:

NSAttributedString* attributedString = html2AttributedString(yourNSString);

А затем вы можете создать макрос для цвета, выравнивания, шрифта и т. Д.

Для iOS вы можете посетить эту страницу, на которой они дают вам замена.

Наши методы initWithHTML нацелены на то, чтобы полностью соответствовать выходным данным версии для Mac. Этого можно добиться для персонажей, и у меня есть модульные тесты, которые гарантируют, что это будет идеально. Что касается атрибутов, есть много вещей, которые нужно сделать в iOS немного по-другому, чтобы добиться того же внешнего вида. Я не буду утомлять вас подробностями.

person Jean    schedule 25.03.2013
comment
Я не сомневаюсь в правильности -stringByDecodingHTMLEntities, но для -stringByConvertingHTMLToPlainText, разве вы не можете просто создать NSAttributedString из HTML и вместо этого взять его строковое значение? - person zneak; 26.03.2013
comment
@zneak Я просто цитировал автора категории, перечисляя доступные методы. Но да, у NSAttributedString есть отличный метод initWithHTML: dataUsingEncoding:, который можно использовать для построения строки с атрибутами из кода HTML. Сущности действительно будут интерпретированы, как и разметка (поэтому я этого не предлагал). Похоже, OP хочет избавиться только от html-сущностей. - person Jean; 26.03.2013
comment
Не могли бы вы объяснить это поподробнее? На самом деле мне нужно будет разобрать любой HTML, я только что понял, что у WS есть некоторые теги html. Спасибо! - person subharb; 26.03.2013
comment
@DavidShaikh Готово. Я добавил дополнительную информацию о NSAttributedString initWithHTML: documentAttributes:]. Обратите внимание, что в моем комментарии выше есть ошибка: это не initWithHTML: dataUsingEncoding:, но, конечно, initWithHTML: documentAttributes:. - person Jean; 26.03.2013
comment
@DavidShaikh Нет, но есть другой способ. Я соответствующим образом обновил свой ответ. Надеюсь это поможет. - person Jean; 26.03.2013