簡體   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