none
кодировка при выводе русского текста по REST запросу RRS feed

  • Вопрос

  • Доброго дня Коллеги,

    есть никсовое ПО позволяющее обращаться к себе через REST API. При выводе на экран данных содержащих русский язык "крякозябры". В самом ПО и через его Web Интерфейс отображение корректное. Запросы через curl с удаленных никсовых машин выводятся тоже в некорректной кодировке.

    примеры вывода ниже:

    Web - Сайт 
    curl - "\u0421\u0430\u0439\u0442 "
    powelshell - Сайт 

    скрипт 

    $cred = Get-Credential
    
    add-type @"
        using System.Net;
        using System.Security.Cryptography.X509Certificates;
        
        public class IDontCarePolicy : ICertificatePolicy {
            public IDontCarePolicy() {}
            public bool CheckValidationResult(
                ServicePoint sPoint, X509Certificate cert,
                WebRequest wRequest, int certProb) {
                return true;
            }
        }
    "@
    [System.Net.ServicePointManager]::CertificatePolicy = new-object IDontCarePolicy
    
    $url = "https://ххх.ххх.ххх.ххх:5665/v1/objects/services?attrs=state&filter=host.name=='WC'"
    
    Invoke-RestMethod -Method get -Uri $url -Credential $cred 
    

    чем посоветуете декодировать?

     

    8 марта 2016 г. 1:26

Ответы

  • [Text.Encoding]::UTF8.GetString([Text.Encoding]::GetEncoding("windows-1251").GetBytes("СайС' "))
    Сайт


    8 марта 2016 г. 9:33
    Отвечающий
  • Хотя в отдельных случаях это работает, в других случаях данные могут быть безвозвратно утрачены при первом перекодировании (потока от веб сервера в строку).

    Например, если имеются коды символов не входящие в кодировку по умолчанию, то они будут заменены на знаки вопроса. После чего восстановить исходные символы будет невозможно.

    Скорее всего проблема в реализации сервиса который не возвращает кодировку (или возвращает неверную кодировку). Если есть возможность то следует починить сервис.

    В противном случае надо подумать об использовании другого API который позволяет получить двоичный поток данных. Этот потом потом следует преобразовать в строку используя кодировку сервера.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    8 марта 2016 г. 16:53
    Модератор

Все ответы

  • [Text.Encoding]::UTF8.GetString([Text.Encoding]::GetEncoding("windows-1251").GetBytes("СайС' "))
    Сайт


    8 марта 2016 г. 9:33
    Отвечающий
  • Хотя в отдельных случаях это работает, в других случаях данные могут быть безвозвратно утрачены при первом перекодировании (потока от веб сервера в строку).

    Например, если имеются коды символов не входящие в кодировку по умолчанию, то они будут заменены на знаки вопроса. После чего восстановить исходные символы будет невозможно.

    Скорее всего проблема в реализации сервиса который не возвращает кодировку (или возвращает неверную кодировку). Если есть возможность то следует починить сервис.

    В противном случае надо подумать об использовании другого API который позволяет получить двоичный поток данных. Этот потом потом следует преобразовать в строку используя кодировку сервера.


    This posting is provided "AS IS" with no warranties, and confers no rights.

    8 марта 2016 г. 16:53
    Модератор
  • Спасибо Коллеги, помогло.
    9 марта 2016 г. 10:41