2014-01-18 80 views
0

我的iPhone應用程序或Xcode有問題。 我目前正在嘗試將我從Google翻譯獲得的字符串轉換爲支持西裏爾字母的字符串格式。到目前爲止,我嘗試了很多字符串編碼,但他們都沒有正常工作。XCode,字符串編碼,西里爾文字母

這裏是我到目前爲止的代碼:

NSString *word = @"hello"; 
NSString *urlPath = [NSString stringWithFormat:@"/translate_a/t?client=t&text=%@&langpair=en|ru",word]; 

NSURL *url = [[NSURL alloc] initWithScheme:@"http" host:@"translate.google.com" path:urlPath]; 

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:url]; 
[request setHTTPMethod:@"GET"]; 

NSURLResponse *response; 
NSError *error; 
NSData *data; 
data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 

NSString *result = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding]; 
NSLog(@"%@", result); 

而且這是在控制檯上的結果:

[ 
    [ 
     [ 
      "ÐÒÉ×ÅÔ", 
      "hello", 
      "privet", 
      "" 
     ] 
    ], 
    [ 
     [ 
      "verb", 
      [ 
       "ÚÄÏÒÏ×ÁÔØÓÑ", 
       "Ú×ÁÔØ", 
       "ÏËÌÉËÁÔØ" 
      ], 
      [ 
       [ 
        "ÚÄÏÒÏ×ÁÔØÓÑ", 
        [ 
         "greet", 
         "hello", 
         "salute", 
         "hullo", 
         "hallo", 
         "halloa" 
        ], 
        , 
        0.0050860695 
       ], 
       [ 
        "Ú×ÁÔØ", 
        [ 
         "call", 
         "invite", 
         "shout", 
         "hail", 
         "hallo", 
         "hello" 
        ], 
        , 
        2.7109536e-05 
       ], 
       [ 
        "ÏËÌÉËÁÔØ", 
        [ 
         "hail", 
         "holler", 
         "call", 
         "challenge", 
         "speak", 
         "hello" 
        ], 
        , 
        2.7109536e-05 
       ] 
      ], 
      "hello", 
      2 
     ], 
     [ 
      "noun", 
      [ 
       "ÐÒÉ×ÅÔÓÔ×ÉÅ", 
       "ÐÒÉ×ÅÔÓÔ×ÅÎÎÙÊ ×ÏÚÇÌÁÓ", 
       "×ÏÚÇÌÁÓ ÕÄÉ×ÌÅÎÉÑ" 
      ], 
      [ 
       [ 
        "ÐÒÉ×ÅÔÓÔ×ÉÅ", 
        [ 
         "greeting", 
         "welcome", 
         "salute", 
         "hail", 
         "salutation", 
         "hello" 
        ], 
        , 
        0.0014801305 
       ], 
       [ 
        "ÐÒÉ×ÅÔÓÔ×ÅÎÎÙÊ ×ÏÚÇÌÁÓ", 
        [ 
         "hallo", 
         "halloa", 
         "viva", 
         "hello" 
        ], 
        , 
        2.7536449e-05 
       ], 
       [ 
        "×ÏÚÇÌÁÓ ÕÄÉ×ÌÅÎÉÑ", 
        [ 
         "hallo", 
         "halloa", 
         "hello" 
        ], 
        , 
        2.7109536e-05 
       ] 
      ], 
      "hello", 
      1 
     ] 
    ], 
    "en", 
    , 
    [ 
     [ 
      "ÐÒÉ×ÅÔ", 
      [ 
       1 
      ], 
      true, 
      false, 
      1000, 
      0, 
      1, 
      0 
     ] 
    ], 
    [ 
     [ 
      "hello", 
      1, 
      [ 
       [ 
        "ÐÒÉ×ÅÔ", 
        1000, 
        true, 
        false 
       ], 
       [ 
        "úÄÒÁ×ÓÔ×ÕÊÔÅ", 
        0, 
        true, 
        false 
       ], 
       [ 
        "Hello", 
        0, 
        true, 
        false 
       ], 
       [ 
        "úÄÒÁ×ÓÔ×ÕÊ", 
        0, 
        true, 
        false 
       ], 
       [ 
        "ÈÅÌÌÏ", 
        0, 
        true, 
        false 
       ] 
      ], 
      [ 
       [ 
        0, 
        5 
       ] 
      ], 
      "hello" 
     ] 
    ], 
    , 
    [ 
     , 
     "Hello!", 
     [ 
      10 
     ], 
     , 
     true 
    ], 
    [ 

    ], 
    2 
] 

所以我希望你明白我的問題。我希望字符串是「привет」而不是「ÐÒÉ×ÅÔ」。 當我試圖將數據編碼爲其他格式時,我通常會得到一個「(null)」結果給我的字符串,例如NSUTF8StringEncoding。

回答

2

「translate.google.com」 返回UTF-8具有下列參數:

NSString *urlPath = [NSString stringWithFormat:@"/translate_a/t?client=t&text=%@&langpair=en|ru&ie=UTF-8&oe=UTF-8",word]; 

然後

NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 

應該工作。

+0

感謝那些工作就好了!但現在我有另一個問題。 我想用「componentsSeparatedByString:」將字符串拆分成一個數組,然後再將這些字母轉換成奇怪的符號。例如,「привет」是「\ U043f \ U0440 \ U0438 \ U0432 \ U0435 \ U0442」。我現在應該怎麼做? – Gustl007

+0

@ Gustl007:這只是數組的NSLog打印非ASCII字符的方式,您不必擔心。 - 但是響應看起來像JSON,所以正確的方法是使用NSJSONSerialization(而不是componentsSeparatedByString)。但是JSON似乎是無效的,所以這是行不通的。 –

+0

工作正常!非常感謝! 我對JSON並不十分了解,但是如果您認爲它無效,那麼我現在不會將自己與它混淆。 – Gustl007

0

呼叫的數據這種方法你得到的,而不是initWithData:encoding:

- (NSString*)decodeKOI8R:(NSData*)dataToDecode { 
    CFStringRef aCFString = CFStringCreateWithCString(NULL, [dataToDecode bytes], kCFStringEncodingKOI8_R); 
    NSString *decodedString = (__bridge NSString*)aCFString; 
    return decodedString; 
}