从服务器解码已知的UTF-8字符串

时间:2012-02-19 19:54:03

标签: cocoa-touch nsstring utf8-decode

在我的应用程序中,我从服务器获取了一些字符串值,但我没有得到正确的字符串。

بسيط这是来自服务器端的字符串,但我得到的是بسÙØ·

我尝试在在线解码器中测试响应字符串:

http://www.cafewebmaster.com/online_tools/utf8_encode

它是UTF-8编码的,但我无法解码iPhone端的字符串。

我看了一下这些Stack Overflow链接作为参考

Converting escaped UTF8 characters back to their original form
unicode escapes in objective-c
utf8_decode for objective-c

但他们都没有帮助。

3 个答案:

答案 0 :(得分:1)

我不明白你的问题有以下几点:

  1. 您是否可以访问服务器端(我的意思是编程)?
  2. 如何向服务器发送和接收数据?
  3. 对于第一个问题,我将假设服务器已编程为以UTF-8编码发送文本。

    如果您使用套接字发送到服务器,现在在iPhone上使用以下内容:

    NSString *messageToSend = @"The text in the language you like";
    const uint8_t *str = (uint8_t *) [messageToSend cStringUsingEncoding:NSUTF8StringEncoding];
    [self writeToServer:str];
    

    函数writeToServer是将函数发送到服务器的函数。

    如果您愿意将数据放在SQLite3数据库中,请使用:

    sqlite3_bind_text(statement, 2, [@"The text in the language you like" UTF8String], -1, NULL);
    

    如果您从服务器接收数据(再次使用套接字),请执行以下操作:

    [rowData appendBytes:(const void *)buf length:len];
    NSString *strRowData = [[NSString alloc] initWithData:rowData encoding:NSUTF8StringEncoding];
    

    我希望这涵盖了你需要的所有案例。

答案 1 :(得分:0)

没有任何来源,很难说出任何结论,但在某些时候,您将UTF-8编码的字符串解释为ISO-8859-1,并且(错误地)将其转换为UTF-8:< / p>

分析字符串'بسيط':

  • 原始长度:8
  • 逻辑长度:4
  • 原始字节:0xD8 0xA8 0xD8 0xB3 0xD9 0x8A 0xD8 0xB7
  • 解释为ISO-8859-1(بسÙØ·):0xC3 0x98 0xC2 0xA8 0xC3 0x98 0xC2 0xB3 0xC3 0x99 0xC2 0x8A 0xC3 0x98 0xC2 0xB7

所以在某些时候你应该在你的代码中找到一些ISO-8859-1的引用。找到并删除它。

答案 2 :(得分:0)

已解决此链接中的问题

Different kind of UTF8 decoding in NSString

NSString * string = @“بسÙØ·”;

我试过

[NSString stringWithUTF8String:(char*)[string cStringUsingEncoding:NSISOLatin1StringEncoding]]

这种方法

谢谢。