Как определить кодировку?

  • Автор темы Автор темы Ilshakin
  • Дата начала Дата начала

Ilshakin

Client
Регистрация
14.02.2017
Сообщения
672
Реакции
659
Баллы
93
Есть исходное сообщение, которое нужно передать запросом, данное сообщение содержит в себе "", tab(2раза) и перенос строки:
C#:
Развернуть Свернуть Копировать
Шла "Саша" по шоссе        и
сосала сушку


Из запросов вижу, что сервер кодирует данное сообщение и отправляет в следующем виде:
C#:
Развернуть Свернуть Копировать
%D0%A8%D0%BB%D0%B0%20%5C%22%D0%A1%D0%B0%D1%88%D0%B0%5C%22%20%D0%BF%D0%BE%20%D1%88%D0%BE%D1%81%D1%81%D0%B5%5Ct%5Ct%D0%B8%5Cn%D1%81%D0%BE%D1%81%D0%B0%D0%BB%D0%B0%20%D1%81%D1%83%D1%88%D0%BA%D1%83


Если применить urldecode к коду выше, то получаем следующее:
C#:
Развернуть Свернуть Копировать
Шла \"Саша\" по шоссе\t\tи\nсосала сушку


Не самопис ли это случаем?
" кодируется как \"
tab
кодируется как \t
перенос строки
кодируется как \n
 
сервер кодирует данное сообщение
Так там уже вместо табов и переноса строк определены как \t и \n только слэши кодированы.
Логично, что после decode будет именно так. Или нет?
 
  • Спасибо
Реакции: Ilshakin
может наоборот ?

65360
 
  • Спасибо
Реакции: Ilshakin
Пишу вот так:

C#:
Развернуть Свернуть Копировать
Шла "Саша" по шоссе        и
сосала сушку

Получаю конечный ответ:

C#:
Развернуть Свернуть Копировать
%D0%A8%D0%BB%D0%B0%20%5C%22%D0%A1%D0%B0%D1%88%D0%B0%5C%22%20%D0%BF%D0%BE%20%D1%88%D0%BE%D1%81%D1%81%D0%B5%5Ct%5Ct%D0%B8%5Cn%D1%81%D0%BE%D1%81%D0%B0%D0%BB%D0%B0%20%D1%81%D1%83%D1%88%D0%BA%D1%83

Т.е. мое исходное сообщение сервер сначала кодирует как то , потом уже прогоняет через urlencode
 
Пишу вот так:

C#:
Развернуть Свернуть Копировать
Шла "Саша" по шоссе        и
сосала сушку

Получаю конечный ответ:

C#:
Развернуть Свернуть Копировать
%D0%A8%D0%BB%D0%B0%20%5C%22%D0%A1%D0%B0%D1%88%D0%B0%5C%22%20%D0%BF%D0%BE%20%D1%88%D0%BE%D1%81%D1%81%D0%B5%5Ct%5Ct%D0%B8%5Cn%D1%81%D0%BE%D1%81%D0%B0%D0%BB%D0%B0%20%D1%81%D1%83%D1%88%D0%BA%D1%83

Т.е. мое исходное сообщение сервер сначала кодирует как то , потом уже прогоняет через urlencode
так ?

65361
 
  • Спасибо
Реакции: Ilshakin
Частично нашел решение, но через сторонний сайт, переходим, вводим начальное сообщение:




На выходе получаем сообщение, которое в дальнейшем переводим в urlencode
Вопрос: Как прикрутить эту кодировку в зенке, ибо не хочется для работы одного запроса - посылать запрос на другой сайт :D
 
Частично нашел решение, но через сторонний сайт
Сайт использует самописное решение. Найти его можно тут - https://coderstoolbox.net/string/string.js , строка 201-221
Можно попробовать на основе этого js кода написать своё решение. Что-то вроде этого (использовать аккуратно, писал на скорую руку. На фразе из первого поста код отработал как положено):
C#:
Развернуть Свернуть Копировать
string result = "";

foreach (char ch in project.Variables["text"].Value)
{
    int match = "\b\t\n\v\f\r\"\\".IndexOf(ch);
    if (match != -1)
    {
        result += "\\" + "btnvfr\"'\\".Substring(match, 1);
    }
    else
    {
        result += ch.ToString();
    }
}

return result;

Текст должен находиться в переменной проекта text (изменить название переменной можно на 3й строке). В настройках экшена C# указать переменную куда будет записан результат работы экшена.
 
  • Спасибо
Реакции: Ilshakin
Сайт использует самописное решение. Найти его можно тут - https://coderstoolbox.net/string/string.js , строка 201-221
Можно попробовать на основе этого js кода написать своё решение. Что-то вроде этого (использовать аккуратно, писал на скорую руку. На фразе из первого поста код отработал как положено):
C#:
Развернуть Свернуть Копировать
string result = "";

foreach (char ch in project.Variables["text"].Value)
{
    int match = "\b\t\n\v\f\r\"\\".IndexOf(ch);
    if (match != -1)
    {
        result += "\\" + "btnvfr\"'\\".Substring(match, 1);
    }
    else
    {
        result += ch.ToString();
    }
}

return result;

Текст должен находиться в переменной проекта text (изменить название переменной можно на 3й строке). В настройках экшена C# указать переменную куда будет записан результат работы экшена.

Тоже изначально подумал, что это самопис, непонятно, почему сайт автоматом подхватывает исходное сообщение, как ECMAScript
Ваш код неверно отработал:

C#:
Развернуть Свернуть Копировать
Шла \"Саша\" по шоссе\t\tи\nсосала сушку - Правильный исходник
Шла \"Саша\" по шоссе\t\tи\r\nсосала сушку - C#

Исходное сообщение по-сути очень маленькое, если встявлять большой html-код, в котором возможны спец.символы и прочие знаки, закодировать через представленный C# выше - вряд ли получится.
 
Попытка №2:)

Добавляем System.Web в Ссылки из GAC (в противном случае код работать не будет)

C#:
Развернуть Свернуть Копировать
string input = project.Variables["text"].Value;
string escaped = System.Web.HttpUtility.JavaScriptStringEncode(input);
return escaped.Replace(@"\r\n", @"\n");

\r\n и \n - это переносы строк. Если загуглить в чём разница, то 95 % ответов будут о том, что \r\n - используется в Windows, а \n - в Unix.
В коде выше я пошёл самым прямым путём - после экранирования всех символов, заменил все вхождения \r\n на \n.
Пробуйте.
 
  • Спасибо
Реакции: Ilshakin
Благодарю за отзывчивость, но полагаю, что нужно искать обходные пути.
Видимо это действительно самопис, по которому нужно регулярить по каждому символу)
Расхождения в \r\n и \n - это же самое начало, дальше больше.
Ради интереса, глянул несколько символов, вот пример обертывания следующей строки:

№11090\05900076 - Исходная
№11090\\05900076 - На выходе

Как обертываются спецсимволы да же не хочу представлять, ведь вполне возможно, что отдельные
символы кодируются по одной js-обертке, а связки символов будут уже оборачиваться в совершенно другие js :D
 
№11090\05900076 - Исходная
№11090\\05900076 - На выходе
Тут просто экранирование слэша. Код из этого сообщения справится с такой задачей

Как обертываются спецсимволы да же не хочу представлять, ведь вполне возможно, что отдельные
символы кодируются по одной js-обертке, а связки символов будут уже оборачиваться в совершенно другие js :D
Можно взять большой кусок текста с различными спец. символами и отправить его через исходный сайт, потом этот же текст прогнать через код, который я давал выше и сравнить их.

Благодарю за отзывчивость, но полагаю, что нужно искать обходные пути.
Можно так же покопаться в сайте и поискать где именно находится скрипт, который экранирует строку и уже в этом скрипте смотреть какие конкретно символы он экранируют .
 
  • Спасибо
Реакции: Ilshakin

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)