【问题标题】:ASCII characters returned null NSJSONSerializationASCII 字符返回 null NSJSONSerialization
【发布时间】:2012-12-18 11:55:07
【问题描述】:

我将数据存储在 mysql 数据库中,由于某些特殊字符,数据以 ascii 编码,我正在尝试为 iphone 应用程序获取数据,json 格式是正确的,但由于特殊字符,它返回给我 null 42756666616c6f205068696c6c79e28099732077696e67732c20636865657365737465616b7320616e64206d6f7265 这存储在 mysql 表中,而实际上它是 Buffalo Philly 的翅膀、奶酪牛排等 我尝试使用 html_entity_decode,html2text 但没有帮助我,请帮助我真的被困住了。

这是我如何从 db 获取数据并以 json 格式打印的代码:

$sql = "SELECT  p.product_id,p.image,p.model,d.name,d.product_id,d.language_id  FROM product AS p ,product_description AS d

        WHERE 
        d.product_id = p.product_id
        AND
        d.language_id = 1

        ORDER BY p.date_added


        limit 10
    ";

$rs = mysql_query($sql);
$data = array();
$products = '{"products":{';
$num = mysql_num_rows($rs);

while($d = mysql_fetch_array($rs)){
$image = new SimpleImage();
$image->load($path.$d['image']);
$image->resize(55,55);
$img = strtotime("now").$count;
$image->save("images/".$img.'.jpg');
$pimage = "$img_url/$img.jpg";

$name = html_entity_decode($d['name'],ENT_QUOTES, 'UTF-8');


$highlight = html_entity_decode($d['model'],ENT_QUOTES, 'UTF-8');


if($count < $num){
    $products .= '"'.$d["product_id"].'":[
                                            {
                                                "id":"'.$d["product_id"].'",
                                                "name":"'.$name.'",
                                                "image_url":"'.$pimage.'",
                                                "highlight":"'.$highlight.'"
                                            }
                                        ],';
    }else{
    $products .= '"'.$d["product_id"].'":[
                                            {
                                                "id":"'.$d["product_id"].'",
                                                "name":"'.$d["name"].'",
                                                "image_url":"'.$pimage.'",
                                                "highlight":"'.$highlight.'"
                                            }
                                        ]';
}

}
$products .='}}';

print($products);

Object-c代码为:

NSData *data = [NSData dataWithContentsOfURL:soURL];
    NSError *error;
    productsRaw = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
    products = [productsRaw objectForKey:@"products"];
    productKeys = [products allKeys];

【问题讨论】:

  • 发布您的代码。您如何获取数据?
  • @Kreiri 我已经用 php 代码编辑了问题以从 db 获取数据
  • 他的意思是我猜的 objC 代码...
  • 代码php和objective c都添加到问题中
  • 但是目标 C 代码没有问题,因为它会获取所有没有特殊字符的项目,但是即使出现带有特殊字符的单个项目,它也会返回 null

标签: php objective-c ios


【解决方案1】:

该字符串似乎是十六进制编码的。 您可以使用pack 函数,如下所示:

pack('H*', $data);

this SO page 中所述,或类似的内容('h*' 打包参数可能有效)。

请注意,生成的字符串将被 locale 编码,因此根据原始应用程序中使用的区域设置,您可能需要进行一些区域设置转换才能获得正确编码的字符串。为此,我建议使用iconv 函数,但无论如何您必须知道最初使用的语言环境。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多