Глупая проблема с UTF8

это глупый вопрос n00b, но я просто не понимаю, как это работает. Я действительно считаю, что мне нужно преобразовать в NSString и использовать «stringWithUTF8String:», но я не понимаю, как именно это реализовать в этом коде, поэтому я получаю правильный вывод в NSLog. Я оглядывался, но это все еще не работает. Плист правильный.

Мой вывод:

2010-11-07 21:43:00.419 plist_test[2984:207] Förbered och skriv  
2010-11-07 21:43:00.425 plist_test[2984:207] KLART  
2010-11-07 21:43:00.425 plist_test[2984:207] LÄS IN PLIST  
2010-11-07 21:43:00.427 plist_test[2984:207] array2: (  
    ETT,    
    "TV\U00c5",  ========Here is the problem, should be "TVÅ"    
    TRE,  
    FYRA  
)

Вот код, который я использую.

- (void)viewDidLoad {

NSLog(@"Förbered och skriv");

NSMutableArray *array = [[NSMutableArray alloc] init];  
[array addObject:@"ETT"];  
[array addObject:@"TVÅ"];  
[array addObject:@"TRE"];  
[array addObject:@"FYRA"];  

[array writeToFile:@"/Users/PeterK/Desktop/plisttest.plist" atomically: TRUE];


NSLog(@"KLART");


NSLog(@"LÄS IN PLIST");

NSMutableArray *array2 = [[NSMutableArray alloc] init];

array2 = [NSMutableArray arrayWithContentsOfFile:@"/Users/PeterK/Desktop/plisttest.plist"];

NSLog(@"array2: %@", array2); ====here is the output


[super viewDidLoad];
}

person PeterK    schedule 07.11.2010    source источник
comment
эти строки правильно сериализованы в файле?   -  person rano    schedule 08.11.2010
comment
выглядит нормально для меня: fileformat.info/info/unicode/char/c5 /index.htm   -  person Stijn Sanders    schedule 08.11.2010


Ответы (2)


Строковые литералы Objective-C не являются строго 7-битными ASCII, как показал ваш пример. Однако вам следует избегать использования чего-либо, кроме 7-битного ASCII, для согласованности и совместимости.

Следующая работа предназначена для простой безопасной загрузки строк с использованием Unicode.

+ (id)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;
+ (id)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;

Локализованные строки предназначены для многоязычного интерфейса. Отделение показанного текста от показанных кнопок и т.д.

person Dylan Lukes    schedule 07.11.2010
comment
Я получаю следующий вывод: 2010-11-09 19:04:17.722 plist_test[684:207] LÄS IN PLIST 2010-11-09 19:04:17.729 plist_test[684:207] текст: ‹?xml версия=кодировка 1.0 =UTF-8?› ‹!DOCTYPE plist PUBLIC -//Apple//DTD PLIST 1.0//EN apple.com/DTDs/PropertyList-1.0.dtd› ‹plist version=1.0› ‹array› ‹string›ETT‹/string› ‹string›TVÅ‹/string› ‹string›TRE‹/ строка› ‹строка›FYRA‹/строка› ‹/массив› ‹/plist› - person PeterK; 09.11.2010
comment
Вы пытаетесь загрузить файл plist с содержимым xml. так что да, это правильный вывод для NSString. Если вы хотите загрузить это, вы должны использовать словарь NSDictionaryWithContentsOfFile, а затем перемещаться по результирующему дереву. - person Dylan Lukes; 12.11.2010

Руководство по программированию строк Apple говорит, что объектные строковые литералы c в вашем коде являются строго 7-битными ASCII. (отредактируйте: они не являются строго 7-битными ASCII, но все, кроме 7-битных ASCII, означает, что они относятся к каждому модулю и не связаны с вашим разделом статических данных, что может привести к раздуванию памяти. Другими словами, если это не бремя памяти, дерзайте.)

Вы можете загрузить свои строки из данных через NSLocalizedString ресурсы метод.

person jd.    schedule 07.11.2010