iPhone SDK - stringWithContentsOfUrl ASCII-символы в источнике HTML - PullRequest
1 голос
/ 22 февраля 2010

Когда я выбираю источник любой веб-страницы, независимо от используемой кодировки, я всегда получаю символы & # - (например, © или ®) вместо самих символов. Это относится и к иностранным символам (таким как åäö по-шведски), которые я должен анализировать из слов "& Aring" и т. Д.)

Я использую

+stringWithContentsOfUrl: encoding: error; 

для получения источника и пробовал несколько разных кодировок, таких как NSUTF8StringEncoding и NSASCIIStringEncoding, но, похоже, ничто не влияет на строку конечного результата.

Любые идеи / советы / решения с благодарностью! Я бы предпочел не выполнять всю таблицу ASCII и заменять все вхождения каждого символа ... Заранее спасибо!

С уважением

Ответы [ 3 ]

1 голос
/ 23 февраля 2010

Я использую

+stringWithContentsOfUrl: encoding: error; 

для получения источника и пробовал несколько различных кодировок, таких как NSUTF8StringEncoding и NSASCIIStringEncoding, но, похоже, ничто не влияет на строку конечного результата.

Вы неправильно понимаете цель этого encoding: аргумента. Метод должен каким-то образом преобразовывать байты в символы; кодировка сообщает ему, какие последовательности байтов описывают какие символы. Вы должны убедиться, что кодировка совпадает с кодировкой данных ресурса.

Ссылки на сущности - это SGML / XML. SGML и XML являются не кодировками; это синтаксис языка разметки. stringWithContentsOfURL:encoding:error: и его двоюродные братья не пытаются каким-либо образом анализировать последовательности символов (синтаксис), что они должны были бы сделать, чтобы преобразовать одну последовательность символов (ссылку на сущность) в другую (сущность, на практике). имеется в виду один символ, на который есть ссылка).

Вы можете преобразовать ссылки на сущности в неэкранированные символы, используя функцию CFXMLCreateStringByUnescapingEntities . Он принимает CFString, которая представляет собой NSString ( беспошлинный мост ), и возвращает CFString, которая является NSString.

0 голосов
/ 22 февраля 2010

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

Идеи для оптимизации? («ASCII» является статическим NSDictionary)

@implementation InternetHelper

+(NSString *)HTMLSourceFromUrlWithString:(NSString *)str convertASCII:(BOOL)state
{
    NSURL *url = [NSURL URLWithString:str];
    NSString *source = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

    if (state)
        source = [InternetHelper ConvertASCIICharactersInString:source];

    return source;
}

+(NSString *)ConvertASCIICharactersInString:(NSString *)str
{
    NSString *ret = [NSString stringWithString:str];

    if (!ASCII)
    {
        NSString *path = [[NSBundle mainBundle] pathForResource:kASCIICharacterTableFilename ofType:kFileFormat];
        ASCII = [[NSDictionary alloc] initWithContentsOfFile:path];
    }

    for (id key in ASCII)
    {
        ret = [ret stringByReplacingOccurrencesOfString:key withString:[ASCII objectForKey:key]];
    }

    return ret;
}       

@end
0 голосов
/ 22 февраля 2010

Вы уверены, что они изначально не в форме Å? Попробуйте сначала просмотреть исходный код в браузере.

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