Cocoa touch 服务器中已知UTF-8字符串的解码不正确

Cocoa touch 服务器中已知UTF-8字符串的解码不正确,cocoa-touch,nsstring,utf8-decode,Cocoa Touch,Nsstring,Utf8 Decode,在我的应用程序中,我从服务器获取了一些字符串值,但最终没有得到正确的字符串 这是服务器端的字符串,但我得到的是 我尝试在在线解码器中测试响应字符串: 它是UTF-8编码的,但我无法解码iPhone端的字符串 我查看了这些堆栈溢出链接作为参考 但是它们都没有帮助。没有任何来源,很难说有什么结论,但在某一点上,您将UTF-8编码字符串解释为ISO-8859-1,并(错误地)将其转换为UTF-8: 管柱“بسيط”的分析: 原始长度:8 逻辑长度:4 原始字节:0xD8 0xA8 0xD8

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

这是服务器端的字符串,但我得到的是

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

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

我查看了这些堆栈溢出链接作为参考




但是它们都没有帮助。

没有任何来源,很难说有什么结论,但在某一点上,您将
UTF-8
编码字符串解释为
ISO-8859-1
,并(错误地)将其转换为
UTF-8

管柱“بسيط”的分析:
  • 原始长度: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的引用。找到并删除它。

没有任何来源,很难说有什么结论,但在某个时候,您将
UTF-8
编码字符串解释为
ISO-8859-1
,并(错误地)将其转换为
UTF-8

管柱“بسيط”的分析:
  • 原始长度: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的引用。找到并删除它。

解决了此链接中的问题

NSString*字符串=@“ØØØØØØØ·”

我试过了

[NSString stringWithUTF8String:(char*)[string cStringUsingEncoding:NSISOLatin1StringEncoding]]
这种方法


谢谢。

解决了此链接中的问题

NSString*字符串=@“ØØØØØØØ·”

我试过了

[NSString stringWithUTF8String:(char*)[string cStringUsingEncoding:NSISOLatin1StringEncoding]]
这种方法


谢谢。

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

  • 您是否可以访问服务器端(我指的是它的编程)
  • 如何向服务器发送和接收数据
  • 对于第一个问题,我假设服务器编程为以UTF-8编码发送文本

    现在在iPhone上,如果使用套接字发送到服务器,请使用以下命令:

    NSString *messageToSend = @"The text in the language you like";
    const uint8_t *str = (uint8_t *) [messageToSend cStringUsingEncoding:NSUTF8StringEncoding];
    [self writeToServer:str];
    
    [rowData appendBytes:(const void *)buf length:len];
    NSString *strRowData = [[NSString alloc] initWithData:rowData encoding:NSUTF8StringEncoding];
    
    其中函数
    writeToServer
    是将数据发送到服务器的函数

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

    sqlite3_bind_text(statement, 2, [@"The text in the language you like" UTF8String], -1, NULL);
    
    如果您正在从服务器接收数据(再次使用套接字),请执行以下操作:

    NSString *messageToSend = @"The text in the language you like";
    const uint8_t *str = (uint8_t *) [messageToSend cStringUsingEncoding:NSUTF8StringEncoding];
    [self writeToServer:str];
    
    [rowData appendBytes:(const void *)buf length:len];
    NSString *strRowData = [[NSString alloc] initWithData:rowData encoding:NSUTF8StringEncoding];
    

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

    从您的问题中,我无法理解以下几点:

  • 您是否可以访问服务器端(我指的是它的编程)
  • 如何向服务器发送和接收数据
  • 对于第一个问题,我假设服务器编程为以UTF-8编码发送文本

    现在在iPhone上,如果使用套接字发送到服务器,请使用以下命令:

    NSString *messageToSend = @"The text in the language you like";
    const uint8_t *str = (uint8_t *) [messageToSend cStringUsingEncoding:NSUTF8StringEncoding];
    [self writeToServer:str];
    
    [rowData appendBytes:(const void *)buf length:len];
    NSString *strRowData = [[NSString alloc] initWithData:rowData encoding:NSUTF8StringEncoding];
    
    其中函数
    writeToServer
    是将数据发送到服务器的函数

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

    sqlite3_bind_text(statement, 2, [@"The text in the language you like" UTF8String], -1, NULL);
    
    如果您正在从服务器接收数据(再次使用套接字),请执行以下操作:

    NSString *messageToSend = @"The text in the language you like";
    const uint8_t *str = (uint8_t *) [messageToSend cStringUsingEncoding:NSUTF8StringEncoding];
    [self writeToServer:str];
    
    [rowData appendBytes:(const void *)buf length:len];
    NSString *strRowData = [[NSString alloc] initWithData:rowData encoding:NSUTF8StringEncoding];
    

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

    听起来您并没有真正解决一些问题。我希望你不会因为这样的“解决方案”而得到报酬。@mvds看到我可以用上面的方法解决我的问题,我在这里发布这篇文章是为了帮助其他人找到同样的解决方案,可能对你有帮助吗others@mvds这有什么问题吗,utf8编码的字符串可以使用上述方法进行解码。我清楚地提到解决方案解决了我的问题,所以你告诉我这个问题的正确答案是什么?…我在你的答案中没有发现任何有用的东西!!!!!!!对不起,我已经清楚地说明了问题所在。最明显的是神奇的数字5。请给我解释一下5号在那里干什么。您的代码中有一个bug(以UTF8读取,就好像它是ISO-8859-1一样),您还没有修复它,但加入了“反向”bug来解决它。5意味着NSISOLatin1StringEncodingThis听起来不像您实际解决了什么问题。我希望你不会因为这样的“解决方案”而得到报酬。@mvds看到我可以用上面的方法解决我的问题,我在这里发布这篇文章是为了帮助其他人找到同样的解决方案,可能对你有帮助吗others@mvds这有什么问题吗,utf8编码的字符串可以使用上述方法进行解码。我清楚地提到解决方案解决了我的问题,所以你告诉我这个问题的正确答案是什么?…我在你的答案中没有发现任何有用的东西!!!!!!!对不起,我已经清楚地说明了问题所在。最明显的是神奇的数字5。请给我解释一下5号在那里干什么。代码中的某个地方有一个bug(以UTF8读取,就好像它是ISO-8859-1一样),但您还没有修复它,而是加入了“反向”bug来解决它。5意味着nsisolatin1stringecoding