Как сделать Stream.Write () выводом в формате UTF-8 - PullRequest
8 голосов
/ 11 октября 2011

Моя проблема такова:

Я создаю и загружаю файл SQL с использованием ASP.NET, но после сохранения файла на FTP-сервере символы, такие как ü, изменяются на & uul; и так далее ... Как я могу предотвратить это? Я не хочу, чтобы файл был отформатирован с использованием кода ASCII, но с использованием UTF-8.

Код, который генерирует и загружает файл, выглядит следующим образом:

//request = the object to be made an request out of.
Stream requestStream = request.GetReguestStream();
var encoding = new UTF8Encoding();
//fileContent is the string to be saved in the file
byte[] buffer = encoding.GetBytes(fileContent); 
requestStream.Write(buffer, 0, buffer.Length);
requestStream.Close();

Как видите, я пытался использовать System.Text.UTF8Encoding, но он не работает.

Ответы [ 2 ]

11 голосов
/ 18 октября 2011

Помните, что с потоками вы почти всегда можете обернуть потоки по мере необходимости. Если вы хотите записать содержимое в кодировке UTF-8, оберните поток запроса в StreamWriter правильной кодировкой:

using (Stream requestStream = request.GetRequestStream())
using (StreamWriter writer = new StreamWriter(requestStream, Encoding.UTF8)) {
  writer.Write(fileContent);
}

Поскольку вы говорите, что загружаете в веб-службу, обязательно установите и кодировку контента. Поскольку вы не указали, откуда берется объект request, я предполагаю, что это обычный HttpWebRequest .

С помощью запроса HttpWebRequest вы сообщаете серверу, что такое кодировка контента, используя свойство ContentType.

request.ContentType = "text/plain;charset=utf-8";

Тем не менее, как уже упоминали другие, сама FTP-передача также может нарушать ее. Если вы можете, убедитесь, что он передается в двоичном режиме, а не в режиме ASCII.

1 голос
/ 18 октября 2011

Поместите его в отладку и посмотрите, что помещается в буфер после кодирования. Вызывается метод GetBytes (). Это проверит, вызывает ли это сторона rx.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...