Лишние “???” в ответе сервера на POST запрос от приложения C#

125
26 ноября 2019, 10:30

Разрабатываю приложение на C#, одной из функций которого является отправка некоторых данных на сервер POST запросом. Всё отправляется и обрабатывается, вот только приложение читает ответ с лишними "вопросиками". То есть, если ответ, например, "OK", моё приложение выведет "???OK", и так постоянно. Это можно как-нибудь исправить, или постоянно удалять эти первые 3 символа из строки-ответа? Вот код на C#:

            //Код на C# 
            using (var webClient = new WebClient())
            {
                var pars = new System.Collections.Specialized.NameValueCollection();
                pars.Add("value", "123");
                string response = System.Text.Encoding.ASCII.GetString(webClient.UploadValues(ServerAddress, pars));
                System.Windows.Forms.MessageBox.Show(response);
            }   

Вот код на PHP:

#Код на PHP
mb_internal_encoding("UTF-8");
/* Уже и кодировку пробовал менять, да, не работает */
mysql_set_charset('utf8');
$val = $_POST['value'];
if ($val = '123') echo 'OK'; else echo 'WRONG';

P.S. Ошибок никаких не возникает

Answer 1

Нашёл, что не работает. Notepad++ добавляет лишние символы в начало файла. PHP файл сервера я писал именно в Notepad++. Решение и объяснение есть здесь: http://www.denvo.ru/pub/programming/remove-spare-chars.html

Но вкратце могу сказать: этот редактор и некоторые другие "умные" программы автоматически добавляют в начало файла сигнатуру, которая позволяет определить тип кодировки (так называемый Byte-order mark). Такая сигнатура представляет собой символ U-FEFF (неразрывный пробел нулевой ширины), который кодируется в соответствии с кодировкой файла (для UTF-8 это будут три байта EF BB BF). В Notepad символ никак не отображается, но при чтении такого файла интерпретатором PHP три символа передаются в браузер. Чтобы этого избежать, надо нажать в Notepad++ или другом редакторе кнопку кодировки "UTF-8 без BOM".

Если вы делаете include/require файла в php, то следует сделать:

ob_start();
include 'include.php';
ob_end_clean();
READ ALSO
stream_socket_client и ssl запросы

stream_socket_client и ssl запросы

Если использовать tcp://6441

93
Как получить номер телефона из txtSubText

Как получить номер телефона из txtSubText

Как программа может получить номер телефона в виде string транслируемым из базы данныхК примеру: Есть программа на андроид типа интернет магазин,после...

100
Стандартный вывод, автоматический flush

Стандартный вывод, автоматический flush

Можно ли перевести поток std::cout в такой режим, чтобы после каждого вывода автоматически делался std::cout << std::flush ?

125