Изменить кодировку из приложения логики Azure http get - PullRequest
0 голосов
/ 11 октября 2019

Я не ожидаю от приложения лазурной логики, но я не могу найти ответ на свою проблему.

Я создал приложение Azure Logic HTTP GET, извлекая следующий файл: http://www.msss.gouv.qc.ca/professionnels/statistiques/documents/urgences/Releve_horaire_urgences_7jours.csv.

Этот файл написан на французском языке и содержит некоторые конкретные символы, которые приложение логики не распознает ивыводится как "?"Знаете ли вы, как я могу изменить исходную кодировку, чтобы в выводе HTTP GET содержались специальные символы?

Спасибо, Дэвид

1 Ответ

0 голосов
/ 13 октября 2019

Как уже сказал Абхинав в комментариях. Следите за блогом Дэвида Бурга, который обсуждает это.

https://blogs.msdn.microsoft.com/david_burgs_blog/2018/02/27/support-non-utf-payloads-in-logic-app-with-a-conversion-azure-function/

Пример функции из блога:

using System;
using System.Net;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json;

namespace ConvertEncoding
{
    public static class Function1
    {
        [FunctionName("Function1")]
        public static async Task<object> Run([HttpTrigger(WebHookType = "genericJson")]HttpRequestMessage req, TraceWriter log)
        {
            log.Info($"Webhook was triggered!");
 
            Encoding inputEncoding = null;
 
            string jsonContent = await req.Content.ReadAsStringAsync();
            dynamic data = JsonConvert.DeserializeObject(jsonContent);
 
            if (data == null || data.text == null || data.encodingInput == null || data.encodingOutput == null)
            {
                return req.CreateResponse(HttpStatusCode.BadRequest, new
                {
                    error = "Please pass text/encodingOutput properties in the input Json object."
                });
            }
 
            try
            {
                string encodingInput = data.encodingInput;
                inputEncoding = Encoding.GetEncoding(name: encodingInput);
            }
            catch (ArgumentException)
            {
                return req.CreateResponse(HttpStatusCode.BadRequest, new
                {
                    error = "Input char set value '" + data.encodingInput + "' is not supported. Supported value are listed at https://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx."
                });
            }
 
            Encoding encodingOutput = null;
            try
            {
                string outputEncoding = data.encodingOutput;
                encodingOutput = Encoding.GetEncoding(outputEncoding);
            }
            catch (ArgumentException)
            {
                return req.CreateResponse(HttpStatusCode.BadRequest, new
                {
                    error = "Output char set value '" + data.encodingOutput + "' is not supported. Supported value are listed at https://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx."
                });
            }
 
            string input = data.text;
            var outputBytes = Encoding.Convert(srcEncoding: inputEncoding, dstEncoding: encodingOutput, bytes: Convert.FromBase64String(input));
 
            var response = req.CreateResponse(HttpStatusCode.OK);
            response.Content = new StringContent(content: Newtonsoft.Json.JsonConvert.SerializeObject(new
            {
                text = Convert.ToBase64String(outputBytes)
            }).ToString(), encoding: encodingOutput, mediaType: "application/json");
 
    return response;
        }
    }
}
...