c # Ошибка кодировки HTTPListener - PullRequest
0 голосов
/ 23 апреля 2010

У меня есть приложение Java, отправляющее HTTP-запросы приложению C #.Приложение C # использует HTTPListener для прослушивания запросов и ответов.На стороне Java я кодирую URL, используя UTF-8.

Когда я отправляю символ \, он кодируется как% 5C, как и ожидалось, но на стороне C # он становится символом /.Кодировка для объекта запроса - Windows-1252, которая, я думаю, может быть причиной проблемы.Как установить кодировку по умолчанию в UTF-8?

В настоящее время я делаю это для преобразования кодировки:

        foreach (string key in request.QueryString.Keys)
        {
            if (key != null)
            {
                byte[] sourceBytes =request.ContentEncoding.GetBytes(request.QueryString[key]);
                string value = Encoding.UTF8.GetString(sourceBytes));
             }
        }

Это обрабатывает символы, не являющиеся ASCII, которые я также отправляю, но не устраняет проблему косой черты.Изучение request.QueryString [key] в отладчике показывает, что / уже существует.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2018

короткий: Вы должны добавить charset=utf-8 к типу контента в заголовке ответа.

Заголовок

должен выглядеть следующим образом. Content-Type = "text / plain; charset = utf-8"

var text = "Hello World - Barkod Çözücü";
var buffer = Encoding.UTF8.GetBytes(text);

ctx.Response.ContentEncoding = Encoding.UTF8;           // this doesnt work??
ctx.Response.ContentType = "text/plain; charset=utf-8"; //Fixxxx

ctx.Response.ContentLength64 = buffer.Length;
ctx.Response.OutputStream.Write(buffer, 0, buffer.Length);

Long:

заголовок ответа моего слушателя http

//where is utf-8 ???  i need to put it somewhere here...!!!
Content-Length: 31
Content-Type: text/plain;    
Server: Microsoft-HTTPAPI/2.0

Я проверил веб-страницу, которая может отображать utf-8 символов, таких как турецкий

заголовок ответа с этого сайта utf-8

content-type: text/html; charset=utf-8    //so we have put it here like this.
content-length: 20270
content-encoding: gzip
...
0 голосов
/ 23 апреля 2010

Кодировать каждую переменную строки запроса как UTF8:

byte[] utf8EncodedQueryBytes = Encoding.UTF8.GetBytes(key);
...