【问题标题】:XCode, String encoding, cyrillic lettersXCode,字符串编码,西里尔字母
【发布时间】:2014-01-18 09:56:05
【问题描述】:

我的 iPhone 应用程序或 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。

【问题讨论】:

    标签: ios xcode string encoding cyrillic


    【解决方案1】:

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

    应该可以。

    【讨论】:

    • 谢谢,效果很好!但现在我有另一个问题。我想用“componentsSeparatedByString:”将字符串拆分成一个数组,但随后它将字母再次转换为奇怪的符号。例如,“привет”就是“\U043f\U0440\U0438\U0432\U0435\U0442”。我现在该怎么办?
    • @Gustl007:这只是数组的 NSLog 打印非 ASCII 字符的方式,您不必担心。 - 但是响应看起来像 JSON,所以正确的方法是使用 NSJSONSerialization(而不是 componentsSeparatedByString)。但是 JSON 似乎无效,因此不起作用。
    • 行得通!非常感谢!而且我对 JSON 不太了解,但如果你说它是无效的,我现在不会混淆它。
    【解决方案2】:

    在你得到的数据上调用这个方法,而不是initWithData:encoding:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      相关资源
      最近更新 更多