Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/111.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 作为webservice响应/可逆mb_检测编码的一部分传输zip数据_Php_Ios_Web Services_Zip_Webservice Client - Fatal编程技术网

Php 作为webservice响应/可逆mb_检测编码的一部分传输zip数据

Php 作为webservice响应/可逆mb_检测编码的一部分传输zip数据,php,ios,web-services,zip,webservice-client,Php,Ios,Web Services,Zip,Webservice Client,我有一个PHP Web服务,它当前返回一个zip存档作为它的唯一输出。我正在使用file\u get\u contents从磁盘读取zip归档文件,并将其作为响应主体发送回去 我希望它以JSON格式返回一些额外的元数据: { "generatedDate": "2012-11-28 12:00:00", "status": "unchanged", "rawData": <zip file in raw form> } { “生成日期”:“2012-11-2

我有一个PHP Web服务,它当前返回一个zip存档作为它的唯一输出。我正在使用
file\u get\u contents
从磁盘读取zip归档文件,并将其作为响应主体发送回去

我希望它以JSON格式返回一些额外的元数据:

{
    "generatedDate": "2012-11-28 12:00:00",
    "status": "unchanged",
    "rawData": <zip file in raw form>
}
{
“生成日期”:“2012-11-28 12:00:00”,
“状态”:“未更改”,
“原始数据”:
}
与此服务对话的iOS应用程序将收到此响应,解析JSON,然后将zip文件存储在本地供自己使用

但是,如果我试图将
file\u get\u contents
的结果填充到json\u encode中,它会理所当然地抱怨字符串不是UTF-8格式。如果我使用
mb\u convert\u编码($rawData,'UTF-8',对其进行UTF-8编码,
mb_检测_编码($rawData,'UTF-8,ISO-8859-1',true))
,它将愉快地对其进行编码,但我找不到一种方法来逆转客户端上的操作(调用
[dataString dataUsingEncoding:NSUTF8StringEncoding]
,然后将结果视为zip文件失败,原因是
BOM无法提取存档:无法读取pkzip本地头文件


有人能提出一个好方法,在JSON响应中插入一块原始数据作为一个字段吗?

当然,如果您成功地将原始数据包含在JSON中,那么在另一端,当您尝试解码JSON时,您会遇到相反的问题,无论您使用什么来解码都无法处理原始数据

相反,我建议您只在响应正文中发送原始数据,并使用标题发送元数据。

回答这个问题

事实证明,像这样对原始数据进行UTF-8编码充其量是不标准的,标准解决方案是对其进行base-64编码,然后使用base-64解码器在客户端上恢复:

$this->response(200, array('rawData' => base64_encode($rawData)));


ZIP存档文件不是文本文件,而是二进制文件!尝试将存档文件从ISO-8859-1转换为UTF-8与尝试旋转存档文件一样有意义

有几种将二进制流序列化为文本的算法,但它们都会增加文件大小。如果这不是问题,请查看:

NSString *rawDataString = [[response responseJSON] objectForKey:@"rawData"];
NSData *rawData = [Base64 decode:rawDataString];