Глупав проблем с 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 String Literals не са строго 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;

Localized String stuff е за неща с многоезичен интерфейс. Разделяне на показания текст от показаните бутони и други подобни.

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. Ако искате да го заредите, ще използвате NSDictionary dictionaryWithContentsOfFile и след това ще навигирате в резултантното дърво. - person Dylan Lukes; 12.11.2010

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

Можете да заредите своите низове от данни чрез NSLocalizedString ресурси.

person jd.    schedule 07.11.2010