我不希望使用Azure逻辑应用程序,但是我似乎找不到解决问题的答案。
我已经创建了一个天蓝色的逻辑应用HTTP GET,它检索了以下文件:http://www.msss.gouv.qc.ca/professionnels/statistiques/documents/urgences/Releve_horaire_urgences_7jours.csv。
此文件为法语,包含逻辑应用程序无法识别并输出为“?”的某些特定字符。您知道如何更改源编码,以便HTTP GET输出保留特殊字符吗?
谢谢 大卫
答案 0 :(得分:0)
正如Abhinav在评论中所述。跟随David burg的博客进行讨论。
博客功能示例:
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;
}
}
}