POST Неанглийские алфавиты, использующие REST API - PullRequest
0 голосов
/ 04 октября 2018

Я использую JIRA REST API для создания новой проблемы, и в описании есть несколько неанглийских алфавитов и некоторые другие настраиваемые поля.Запрос JSON выглядит следующим образом:

    {
      "fields": {
        "issuetype": {
          "id": 10303
        },
        "description": " Additional informations",
        "customfield_11419": "",
        "customfield_11413": "Editor: Øyst gården",
        "customfield_11436": {
          "value": "DONE"
        },
        "customfield_11439": "Jørund"
      }
    }

После завершения HTTP POST с использованием приведенного ниже кода я получаю ответ OK с конечной точки.

            HttpWebRequest request;
            WebResponse response;         
            request = WebRequest.Create(jira_url) as HttpWebRequest;
            request.Credentials = CredentialCache.DefaultCredentials;
            request.Method = "POST";
            request.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
            byte[] authBytes = Encoding.UTF8.GetBytes((jira_email + ":" + jira_token).ToCharArray());
            request.Headers["Authorization"] = "Basic " + Convert.ToBase64String(authBytes);
            if (!string.IsNullOrEmpty(json_string)) //the inpot JSON string to be submitted 
            {
                request.ContentType = "application/json; charset=utf8";
                byte[] jsonPayloadByteArray = Encoding.ASCII.GetBytes(json_string.ToCharArray());
                request.GetRequestStream().Write(jsonPayloadByteArray, 0, jsonPayloadByteArray.Length);
            }                
            response = request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream());
            response_string = reader.ReadToEnd();
            reader.Dispose();

Но при рендеринге деталей в интерфейсе JIRA я могу это увидеть?замена специальных не английских символов.Пример

"Редактор: Øyst gården" из JSON в

Редактор:? Yst g? Rden в пользовательском интерфейсе

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

1 Ответ

0 голосов
/ 04 октября 2018

Кажется, вы используете неправильный тип кодирования / декодирования.

, если вы решите использовать UTF-8, вы не будете использовать ASCII

Итак,

if (!string.IsNullOrEmpty(json_string)) //the inpot JSON string to be submitted 
        {
            request.ContentType = "application/json; charset=utf8";
            byte[] jsonPayloadByteArray = Encoding.ASCII.GetBytes(json_string.ToCharArray());
            request.GetRequestStream().Write(jsonPayloadByteArray, 0, jsonPayloadByteArray.Length);
        }    

вам нужно изменить его на

if (!string.IsNullOrEmpty(json_string)) //the inpot JSON string to be submitted 
        {
            request.ContentType = "application/json; charset=utf8";
            byte[] jsonPayloadByteArray = Encoding.UTF8.GetBytes(json_string.ToCharArray());
            request.GetRequestStream().Write(jsonPayloadByteArray, 0, jsonPayloadByteArray.Length);
        }    
...