Cocoa touch 服务器中已知UTF-8字符串的解码不正确
在我的应用程序中,我从服务器获取了一些字符串值,但最终没有得到正确的字符串 这是服务器端的字符串,但我得到的是 我尝试在在线解码器中测试响应字符串: 它是UTF-8编码的,但我无法解码iPhone端的字符串 我查看了这些堆栈溢出链接作为参考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
编码字符串解释为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]]
这种方法
谢谢。从你的问题中我不明白以下几点:
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];
我希望这涵盖了您需要的所有案例。从您的问题中,我无法理解以下几点:
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