在我的应用程序中,我从服务器获取了一些字符串值,但我最终没有得到正确的字符串。
بسيط
这是来自服务器端的字符串,但我得到的是بسÙØ·
我尝试在在线解码器中测试响应字符串:
http://www.cafewebmaster.com/online_tools/utf8_encode
它是 UTF-8 编码的,但我无法解码 iPhone 端的字符串。
我看了一下这些堆栈溢出链接作为参考
将转义的 UTF8 字符转换回其原始形式
Objective-C
中的 Unicode 转义utf8_decode for Objective-c
但他们都没有帮助。
我从你的问题中不明白以下几点:
- 您是否可以访问服务器端(我的意思是它的编程(?
- 如何向服务器发送和接收数据?
对于第一个问题,我将假设服务器被编程为以 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];
我希望这涵盖了您需要的所有情况。
没有任何来源,很难说出任何结论,但在某些时候,您将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 中不同类型的 UTF8 解码
NSString *string = @"Ø ̈سÙØ·";
我试过了
[NSString stringWithUTF8String:(char*)[string cStringUsingEncoding:NSISOLatin1StringEncoding]]
此方法
谢谢。