问题描述
|
在我的应用程序中,我必须获取服务器返回的一些数据。此数据采用UTF8编码格式。因此,我的服务器返回以下字符串:
r \\ u00f3做S \\ u00edt
在我的代码中,我执行以下操作:
Nsstring *responseString = [[Nsstring alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
NSLog(@\"%@\",responseString);
输出为:
r \\ u00f3做S \\ u00edt
它应该是
做吧
难道我做错了什么?
让我向大家展示整个系统的工作原理。
我在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);
然后在浏览器上显示以下内容:
[{\“ class_id \”:\“ 8 \”,\“ name \”:\“ r \\ u00f3
pir \\ u00e1 \“,\” local_id \“:\” 10 \“},{\” class_id \“:\” 9 \“,\” name \“:\” r \\ u00f3
做S \\ u00edtio \“,\” local_id \“:\” 8 \“}]
解决方法
您确定responseData为UTF8格式吗?尝试十六进制转储responseData并检查字节。
我应该看起来像:
0x72 0xc3 0xb3 0x20 0x64 0x6f 0x20 0x53 0xc3 0xad 0x74
\'r \'\'ó\'\'\'\'d \'\'o \'\'\'\'S \'\'í\'\'t \'
我假设\'ó\'== 0x00f3 unicode点和\'í\'== 0x00ed unicode点。
我的猜测是响应数据实际读取为:
\“ r \\ u00f3做S \\ u00edt \”
在这种情况下,我将查看在哪里生成responseData,我的猜测是从Unicode字符串到utfstring的对话不正确或源数据不正确。 \'\\ uxxxx \'看起来像是某种语言字符串文字的unicode点字符串编码?
, 尝试
NSString *responseString = [NSString stringWithFormat: @\"%@\",[responseData bytes]];