繁体   English   中英

如何在NSInputStream上设置编码类型?

[英]How do I set an encoding type on NSInputStream?

我需要使用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();
  1. 您不会告诉NSInputStream使用哪种编码,因为NSInputStream不会对字符串进行操作。 NSInputStream给您原始字节。 您有责任使用所需的任何输入格式对这些字节进行解码。

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

  2. UIImage转换为任何字符编码的想法有点荒谬,因为UIImage是像素数据,而不是文本。 首先,您必须解码要如何编码像素数据。 假设您要使用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的超集,因此imageBase64Data的内容也是有效的CP1252。

    如果您希望使用一个字符串来进行显式编码,则可以执行以下操作:

     NSString *imageBase64String = [imageData base64EncodedStringWithOptions::0]; NSData *imageBase64Data = [imageBase64String dataUsingEncoding: NSWindowsCP1252StringEncoding]; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM