2014-01-18 180 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; 
}