цель c - не читает кодированный файл utf-8 - PullRequest
0 голосов
/ 22 марта 2011

Я пытаюсь отобразить японский текст на симуляторе ios и ipod touch.Текст читается из файла XML.Заголовок:

<?xml version="1.0" encoding="utf-8"?>

Когда текст на английском языке, он отображается нормально.Однако, когда текст на японском языке, он выглядит как неразборчивая путаница однобайтовых символов.

Я попытался сохранить файл специально как Unicode, используя TextEdit.Я использую NSXMLParser для анализа данных.Любые идеи будут высоко оценены.

Вот код синтаксического анализа

   // Override point for customization after application launch.

    NSString *xmlFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"questionsutf8.xml"];
    NSString *xmlFileContents = [NSString stringWithContentsOfFile:xmlFilePath];

    NSData *data = [NSData dataWithBytes:[xmlFileContents UTF8String] length:[xmlFileContents lengthOfBytesUsingEncoding: NSUTF8StringEncoding]];                   

    XMLReader *xmlReader = [[XMLReader alloc] init];

    [xmlReader parseXMLData: data];

Ответы [ 2 ]

2 голосов
/ 22 марта 2011

stringWithContentsOfFile: является устаревшим методом.Он не выполняет обнаружение кодирования, если файл не содержит соответствующую метку порядка байтов, в противном случае он интерпретирует файл как кодировку строки C по умолчанию (кодировка, возвращаемая методом +defaultCStringEncoding).Вместо этого вы должны использовать метод не устаревшего [и кодирования] stringWithContentsOfFile:usedEncoding:error:.

Вы можете использовать его следующим образом:

NSStringEncoding enc;
NSError *error;
NSString *xmlFileContents = [NSString stringWithContentsOfFile:xmlFilePath
                                                  usedEncoding:&enc
                                                         error:&error];

if (xmlFileContents == nil)
{
    NSLog (@"%@", error);
    return;
}
1 голос
/ 22 марта 2011

Во-первых, вы должны проверить с помощью TextWrangler (бесплатно из магазина приложений Mac или barebones.com), что ваш XML-файл действительно имеет кодировку UTF-8.

Во-вторых, попробуйте создать xmlFileContents с помощью + stringWithContentsOfFile: encoding:ошибка: явно указывается кодировка UTF-8.Или, что еще лучше, полностью обойдите промежуточную строку и создайте данные с помощью + dataWithContentsOfFile:.

...