2011-04-26 229 views
0

當我得到一個形式爲\ u043F \ u043F(Unicode)的字符串時,如何將它轉換爲可讀的NSUT8String?這裏是我的代碼(當這些非英文字符失敗):將unicode字符串轉換爲utf8

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ 

    NSString *theStr = [[NSString alloc] initWithBytes:[receivedData bytes] 
                length:[receivedData length] encoding: NSUTF8StringEncoding]; 

    NSLog(theStr); 
} 

當字符串是英文字符,一切都很好 - 但是當它是Unicode格式它不能給我一個可讀的字符串(但保持Unicode格式)。

您認爲如何?


編輯:

,我意識到我沒有什麼,我試圖做給足夠的信息。我試圖用youtube的方式來獲取自動建議的關鍵字,當你使用搜索框(沒有官方的,只是使用嗅探器找出)。它是:

http://suggestqueries.google.com/complete/search?hl=en&client=youtube&hjson=t&ds=yt&jsonp=window.yt.www.suggest.handleResponse&q=*******&cp=****** 

q是您的查詢,cp是q的長度。

因此,基本上當q是英文的東西,它工作正常。但是,當q具有非英文字符(俄羅斯爲例)這是我獲得(來自的NSLog):

window.yt.www.suggest.handleResponse(["\u043F\u0440",[["\u043F\u0440\u0438\u043A\u043E\u043B\u044B","","0"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D","","1"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 87","","2"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 88","","3"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 86","","4"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 85","","5"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 89","","6"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 84","","7"],["\u043F\u0440\u0438\u043A\u043E\u043B\u044B \u0432 \u043F\u0440\u044F\u043C\u043E\u043C \u044D\u0444\u0438\u0440\u0435","","8"],["\u043F\u0440\u043E\u0436\u0435\u043A\u0442\u043E\u0440\u043F\u0435\u0440\u0438\u0441\u0445\u0438\u043B\u0442\u043E\u043D 90","","9"]],{}]) 

回答

0

我想這可能幫助..

NSString *yourString = "\u043F\u0440\u0438\u043A\u043E\u043B\u044B"; 
NSArray *unicodeArray = [yourString componentsSeparatedByString:@"\\u"]; 
NSMutableString *finalString = [[NSMutableString alloc] initWithString:@""]; 
for (NSString *unicodeString in unicodeArray) { 
    if (![unicodeString isEqualToString:@""]) { 
     unichar codeValue; 
     [[NSScanner scannerWithString:unicodeString] scanHexInt:&codeValue]; 
     NSString* betaString = [NSString stringWithCharacters:&codeValue length:1]; 
     [finalString appendString:betaString]; 
    } 
} 
//finalString should have encoded one 
1

您可以使用:

@interface NSString 
{ 
    - (__strong const char *)UTF8String; // Convenience to return 
              // null-terminated UTF8 representation 
}