1

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

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

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

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

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

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


在objective-c utf8_decode for objective-c中将转义的UTF8 字符转换回其原始形式

但他们都没有帮助。

4

3 回答 3

1

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

  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];

我希望这涵盖了您需要的所有情况。

于 2012-02-19T20:33:01.867 回答
0

没有任何来源,很难说出任何结论,但在某些时候,您将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所以在某些时候你可能应该在你的代码中找到一些参考。找到它并删除它。

于 2012-02-19T20:07:26.460 回答
0

从此链接解决了问题

NSString 中不同类型的 UTF8 解码

NSString *string = @"بسÙØ·";

我试过

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

这种方法

谢谢你。

于 2012-02-19T20:21:29.280 回答