使用目标C显示UTF8字符的问题

时间:2011-05-27 17:56:39

标签: iphone objective-c

在我的应用程序中,我必须获取服务器返回的一些数据..此数据采用UTF8编码格式..所以我的服务器返回以下字符串:

  

r \ u00f3做S \ u00edt

在我的代码中,我执行以下操作:

NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@"%@",responseString);

输出是:

  

r \ u00f3做S \ u00edt

它应该是

  

ródosít

我做错了吗?

让我告诉大家,各个系统是如何运作的。

我在mysql数据库上查询..所有表都是UTF8编码..

header('Content-Type: text/html; charset=utf-8');
//THE CONNECTION PART GOES HERE
mysql_query("SET NAMES 'UTF8'");
mysql_query('SET character_set_client=UTF8');       
mysql_query('SET character_set_results=UTF8');
mysql_query('SET character_set_connection=UTF8'); 

$query = "select * from table";
$out = mysql_query($query);
$rows = array();
while($reg = mysql_fetch_assoc($out)) 
{
    $rows[] = $reg;
}
print json_encode($rows);

然后它在浏览器上打印以下内容:

  

[{ “类标识码”: “8”, “姓名”:“R \ u00f3   PIR \ u00e1" , “local_id” 中: “10”},{ “类标识码”: “9”, “姓名”:“R \ u00f3   do S \ u00edtio“,”local_id“:”8“}]

2 个答案:

答案 0 :(得分:1)

你确定responseData是UTF8格式吗?尝试十六进制转储responseData并检查字节。

我应该看起来像:

0x72 0xc3 0xb3 0x20 0x64 0x6f 0x20 0x53 0xc3 0xad 0x74 'r'''''''''''''''''''''''

我假设'ó'== 0x00f3 unicode point和'í'== 0x00ed unicode point。

我的猜测是响应数据实际上是:

“r \ u00f3 do S \ u00edt”

在这种情况下,我会看看responseData的生成位置,我的猜测是从unicode字符串到utfstring的对话不正确或者源数据不正确。 '\ uxxxx'看起来像是某种语言字符串文字的某种unicode点字符串编码?

答案 1 :(得分:0)

尝试

NSString *responseString = [NSString stringWithFormat: @"%@", [responseData bytes]];