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



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

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

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

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

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

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

将转义的 UTF8 字符转换回其原始形式
Objective-C
中的 Unicode 转义utf8_decode for Objective-c

但他们都没有帮助。

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

  1. 您是否可以访问服务器端(我的意思是它的编程(?
  2. 如何向服务器发送和接收数据?

对于第一个问题,我将假设服务器被编程为以 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]]

此方法

谢谢。

最新更新