Как я устанавливаю тип кодировки на NSInputStream?
Мне нужно передать изображение в бэкэнд-сервис.NET, используя кодировку Windows 1252. Поэтому я считаю, что мне нужно создать NSURLRequest
с этими HTTPBodyStream
установить на NSInputStream
который создается с данными изображения. И мне нужно, чтобы кодировка была установлена в Windows 1252 или NSWindowsCP1252StringEncoding
,
У меня действительно есть два вопроса:
- Как мне сказать
NSInputStream
использоватьNSWindowsCP1252StringEncoding
для его передачи в данных или файле. - Как мне преобразовать 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
, Но это то же самое: вы даете необработанные байты в выходной поток. Вы должны закодировать свои строки в байты самостоятельно.Идея преобразования
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];