能否将从RESTful API获取的JFIF字符串转为可查看的JPEG?
问题解决:从JSON字符串还原JPEG图片
- 结论:可以转换,但你选错了编码方式,导致生成的图片损坏。
问题分析
你提取的imagedata字符串并不是UTF32编码的文本,而是原始JPEG二进制数据被直接序列化为Unicode字符串(每个字节对应一个Unicode码点)。你现在用Encoding.UTF32.GetBytes()转换,相当于把原本的单字节数据强行按4字节UTF32解析,完全破坏了原始二进制结构,所以图片无法打开。
从字符串开头的����\u0000\u0010JFIF也能验证这一点:\u0000对应JPEG头里的0x00字节,\u0010对应0x10字节,前面的����是JPEG文件头的不可打印字节(0xFF、0xD8等)被转成了Unicode不可见字符。
正确代码示例
替换编码方式为ISO-8859-1(Latin-1),它会将每个Unicode字符直接映射回对应的单字节数据,完美还原原始JPEG二进制:
var data = JsonConvert.DeserializeObject<ImageReturn>(response.Content); var imgStr = data.record[0].tables.photo.imagedata; // 用ISO-8859-1编码还原原始字节 var imgBytes = Encoding.GetEncoding("ISO-8859-1").GetBytes(imgStr); // 将字节写入文件 System.IO.File.WriteAllBytes(@"C:\Users\example\Desktop\test.jpeg", imgBytes);
补充说明
如果API返回的是Base64编码的图片字符串,你应该用Convert.FromBase64String(imgStr)来转换,但你的场景里是原始二进制直接被序列化为字符串,所以必须用ISO-8859-1编码还原。
内容的提问来源于stack exchange,提问作者user1856254
相关产品推荐
相关产品推荐

