UTF8的愚蠢问题

时间:2010-11-07 20:57:17

标签: objective-c plist

这是一个愚蠢的n00b问题,但我只是不让它工作。我相信我需要转换为NSString并利用“stringWithUTF8String:”但不明白如何在此代码中实现它,以便我在NSLog中得到正确的输出。我一直在环顾四周,但它仍然无法正常工作。 plist是正确的。

我的输出是:

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];
}

2 个答案:

答案 0 :(得分:2)

Apple String Programming Guide表示代码中的客观c字符串文字是严格的7位ASCII。 (编辑:它们不是严格的7位ASCII,但是除了7位ASCII以外的任何东西都意味着它们是每个模块而没有链接到静态数据部分,这可能导致内存膨胀。换句话说,除非它是记忆负担,去吧。)

您可以通过NSLocalizedString resources方法从数据加载字符串。

答案 1 :(得分:1)

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;

本地化字符串内容适用于多语言界面内容。将显示的文本与显示的按钮分开,等等。