0

我需要使用 Windows 1252 编码将图像流式传输到 .NET 后端服务。所以我相信我需要创建一个NSURLRequest将其HTTPBodyStream设置为NSInputStream使用图像数据创建的一个。我需要将编码设置为 Windows 1252 或NSWindowsCP1252StringEncoding.

我真的有两个问题:

  1. 我如何告诉NSInputStream使用NSWindowsCP1252StringEncoding它传入的数据或文件。
  2. 如何将 UIImage 转换为 NSWindowsCP1252StringEncoding 数据?我只知道 base64 方法。

编辑:

这是模拟工作客户端的示例 .NET 代码。

            wr.Method = "POST";
            wr.ContentType = "application/octet-stream";
            wr.UseDefaultCredentials = true;

            string ImagePath = @"C:\Users\smith\Desktop\Cat-and-dog.jpg";

            byte[] ibuffer = File.ReadAllBytes(ImagePath);

            wr.ContentLength = ibuffer.Length;
            Stream pData = wr.GetRequestStream();
            pData.Write(ibuffer, 0, ibuffer.Length);
            pData.Close();

            HttpWebResponse wres = wr.GetResponse() as HttpWebResponse;

            Encoding enc = System.Text.Encoding.GetEncoding(1252);

            StreamReader strRdr = new StreamReader(wres.GetResponseStream(), enc);
            string resp = strRdr.ReadToEnd();
4

1 回答 1

1
  1. 您不知道NSInputStream要使用什么编码,因为NSInputStream不对字符串进行操作。NSInputStream给你原始字节。您有责任使用您想要的任何输入格式对这些字节进行解码。

    此外,由于您“需要将图像流式传输到 .NET 后端服务”,我认为您需要的是 .NET NSOutputStream,而不是NSInputStream. 但这是相同的交易:您将原始字节提供给输出流。您必须自己将字符串编码为字节。

  2. 将 a 转换为任何字符编码的想法UIImage有点荒谬,因为 aUIImage是像素数据,而不是文本。您首先必须解码您希望如何编码像素数据。假设您想使用 PNG 对其进行编码:

    UIImage *image = ...
    NSData *imageData = UIImagePNGRepresentation(image);
    NSData *imageBase64Data = [imageData base64EncodedDataWithOptions:0];
    

    此时,imageBase64Data包含图像,编码为PNG,编码为base 64,编码为UTF-8。您可能认为这是错误的字符编码,但 base 64 编码只使用可打印的 ASCII 字符。由于 CP1252 和 UTF-8 都是 ASCII 的超集,因此imageBase64DataCP1252 的内容也是有效的。

    如果您希望有一个字符串来显式编码,您可以这样做:

    NSString *imageBase64String = [imageData base64EncodedStringWithOptions::0];
    NSData *imageBase64Data = [imageBase64String dataUsingEncoding: NSWindowsCP1252StringEncoding];
    
于 2015-10-29T21:11:58.020 回答