2012-05-30 65 views
2

我有一個NSDictionary,其內容是我從一個.plist中讀取的,它是用utf-8編碼的。Objective-C,utf-8中的NSDictionary編碼

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>ABACİ</key> 
    <array> 
     <string>ABALİ</string> 
     <string>APACİ</string> 
     <string>ARAÇİ</string> 
    </array> 

無論如何,問題是,當我的NSLog這個字典到控制檯的內容,我得到這樣

"K\U00d6PEK" 

這個結果被記錄另一個條目的版本,不包含普通的拉丁英文字符。我嘗試使用的字符是UTF-8編碼。

然而,當我從一個文本文件

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"words_tr" ofType:@"txt"]; 
     NSString *contentString = [[NSString alloc] initWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:NULL]; 

     _wordStack = [[NSMutableArray alloc]initWithArray:[contentString componentsSeparatedByString:@","]]; 

讀取陣列的內容這完美的作品。我也想從屬性列表中讀取相同的內容。我如何獲得以UTF-8編碼爲NSDictionary的結果?

回答

1

你試過NSLog嗎?

NSLog(@"%@", [NSString stringWithCString:contentString encoding:NSUTF8StringEncoding]); 
+0

這不是我想要的。我想通過適當的編碼訪問NSDictionary,並將鍵與用戶輸入進行比較。那NSString只是一個例子。 –

+1

好吧,我對你的問題的猜測是,NSLog通常不支持UTF8字符串。所以它顯示不正確,但是你的字符串是正確的。通過將字符串分配給UILabel更容易測試。 – Jirapong

+0

這確實是對的。我不知道NSLog不支持UTF8。謝謝!你知道是否有任何支持?我查看了喜好,但我沒有運氣。 –

1
+(NSString*)utf8toNString:(NSString*)str{ 
    NSString* strT= [str stringByReplacingOccurrencesOfString:@"\\U" withString:@"\\u"]; 
    //NSString *strT = [strTemp mutableCopy]; 
    CFStringRef transform = CFSTR("Any-Hex/Java"); 
    CFStringTransform((__bridge CFMutableStringRef)strT, NULL, transform, YES); 

    return strT; 
}