Logic Apps Unicode olmayan karakter kodlamasını destekleme

Metin yükleri ile çalışırken, Azure Logic Apps, metin UTF-8 gibi bir Unicode biçiminde kodlanır. İş akışınızda farklı kodlarla karakter alma, gönderme veya işleme sorunlarıyla karşılaşabilirsiniz. Örneğin, Unicode desteklemeyen eski sistemlerle çalışırken Düz dosyalardaki bozuk karakterler alabilirsiniz.

Diğer karakter kodlamasının bulunduğu metinle çalışmak için, Unicode olmayan yüke Base64 kodlaması uygulayın. Bu adım, Logic Apps metnin UTF-8 biçiminde olduğunu kabul etmesini engeller. Ardından herhangi bir dönüştürme yapabilirsiniz. Azure Işlevleri kullanılarak UTF-8 ' e ağ tarafından desteklenen kodlama.

Bu çözüm, hem çok kiracılı hem de tek kiracılı iş akışlarıyla birlikte kullanılabilir. Bu çözümü AS2 Bağlayıcısı ile de kullanabilirsiniz.

Yük şifrelemesini Dönüştür

İlk olarak, tetikleyicinizin içerik türünü doğru şekilde tanımlayıp belirleyemadığını denetleyin. Bu adım, metnin artık UTF-8 olduğunu varsaymamasını Logic Apps sağlar.

Içerik türünü ayarla ayarı olan Tetikleyiciler için Hayır' ı seçin. Tetikleyiciniz bu seçeneği içermiyorsa, içerik türü gelen ileti tarafından ayarlanır.

İçerik için HTTP isteği tetikleyicisi kullanıyorsanız text/plain , bu charset parametreyi Content-Type çağrının üst bilgisinde ayarlamanız gerekir. charsetParametresi ayarlamazsanız veya parametre yükün kodlama biçimiyle eşleşmezse, karakterler bozulabilir. Daha fazla bilgi için bkz. text/plain içerik türünü işleme.

Örneğin, HTTP tetikleyicisi, Content-Type üst bilgi doğru parametresiyle ayarlandığında, gelen IÇERIĞI UTF-8 ' e dönüştürür charset :

{
    "headers": {
        <...>
        "Content-Type": "text/plain; charset=windows-1250"
        },
        "body": "non UTF-8 text content"
}

Content-TypeÜstbilgiyi olarak AYARLARSANıZ application/octet-stream UTF-8 olmayan karakterler de alabilirsiniz. Daha fazla bilgi için bkz. application/octet-stream içerik türünü işleme.

Base64 kodlama içeriği

Base64 'i içerik kodlamadan önce, metni UTF-8 ' e dönüştürtığınızdanemin olun. Metni UTF-8 ' e dönüştürmeden önce bir dizeye Base64 kodu çözeniz, karakterler bozuk döndürebilir.

Sonra, herhangi birini dönüştürün. Başka bir ağa desteklenen kodlama. NET tarafından desteklenen kodlama. Azure işlevleri kod örneğini veya .NET kod örneğinigözden geçirin:

İpucu

Tek kiracılı mantık uygulamaları için, dönüştürme işlevini yerel olarak çalıştırarak performansı iyileştirebilir ve gecikme süresini azaltabilirsiniz.

Azure Işlevleri sürümü

Aşağıdaki örnek Azure Işlevleri sürüm 2 ' dir:

using System;
using System.IO;
using System.Text;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Azure.WebJobs.Host;
using Newtonsoft.Json;

public static class ConversionFunctionv2 {
  [FunctionName("ConversionFunctionv2")]
  public static IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req, TraceWriter log) {
    log.Info("C# HTTP trigger function processing a request.");

    Encoding inputEncoding = null;

    string requestBody = new StreamReader(req.Body).ReadToEnd();
    dynamic data = JsonConvert.DeserializeObject(requestBody);

    if (data == null || data.text == null || data.encodingInput == null || data.encodingOutput == null) {
      return new BadRequestObjectResult("Please pass text/encodingOutput properties in the input JSON object.");
    }

    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

    try {
      string encodingInput = data.encodingInput.Value;
      inputEncoding = Encoding.GetEncoding(name: encodingInput);
    } catch (ArgumentException) {
      return new BadRequestObjectResult($"Input character set value '{data.encodingInput.Value}' is not supported. Supported values 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.Value;
      encodingOutput = Encoding.GetEncoding(outputEncoding);
    } catch (ArgumentException) {
      return new BadRequestObjectResult($"Output character set value '{data.encodingOutput.Value}' is not supported. Supported values are listed at https://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx.");
    }

    return (ActionResult) new JsonResult(
      value: new {
        text = Convert.ToBase64String(
          Encoding.Convert(
            srcEncoding: inputEncoding,
            dstEncoding: encodingOutput,
            bytes: Convert.FromBase64String((string) data.text)))
      });
  }
}

.NET sürümü

Aşağıdaki örnek .NET Standard ve Azure işlevleri sürüm 2 ile kullanım içindir:

    using System;
    using System.IO;
    using System.Text;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.Azure.WebJobs;
    using Microsoft.Azure.WebJobs.Extensions.Http;
    using Microsoft.AspNetCore.Http;
    using Microsoft.Azure.WebJobs.Host;
    using Newtonsoft.Json;

    public static class ConversionFunctionNET
    {
        [FunctionName("ConversionFunctionNET")]
        public static IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequest req, TraceWriter log)
        {
            log.Info("C# HTTP trigger function processing a request.");

            Encoding inputEncoding = null;

            string requestBody = new StreamReader(req.Body).ReadToEnd();
            dynamic data = JsonConvert.DeserializeObject(requestBody);

            if (data == null || data.text == null || data.encodingInput == null || data.encodingOutput == null)
            {
                return new BadRequestObjectResult("Please pass text/encodingOutput properties in the input JSON object.");
            }

            Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

            try
            {
                string encodingInput = data.encodingInput.Value;
                inputEncoding = Encoding.GetEncoding(name: encodingInput);
            }
            catch (ArgumentException)
            {
                return new BadRequestObjectResult($"Input character set value '{data.encodingInput.Value}' is not supported. Supported values 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.Value;
                encodingOutput = Encoding.GetEncoding(outputEncoding);
            }
            catch (ArgumentException)
            {
                return new BadRequestObjectResult($"Output character set value '{data.encodingOutput.Value}' is not supported. Supported values are listed at https://msdn.microsoft.com/en-us/library/system.text.encoding(v=vs.110).aspx.");
            }

            return (ActionResult)new JsonResult(
                value: new
                {
                    text = Convert.ToBase64String(
                        Encoding.Convert(
                            srcEncoding: inputEncoding,
                            dstEncoding: encodingOutput,
                            bytes: Convert.FromBase64String((string)data.text)))
                });
        }
    }

Aynı kavramları kullanarak, iş akışınızdan Unicode olmayan bir yük da gönderebilirsiniz.

Örnek yük dönüştürmeleri

Bu örnekte, Base64 kodlamalı örnek giriş dizesi, aksanlı karakterler içeren bir kişisel addır, H é Lo ï.

Örnek giriş:

{  
    "text": "SMOpbG/Dr3Nl",
    "encodingInput": "utf-8",
    "encodingOutput": "windows-1252"
}

Örnek çıktı:

{
    "text": "U01PcGJHL0RyM05s"
}

Unicode olmayan yük gönder

İş akışınızın Unicode olmayan bir yükünü göndermeniz gerekiyorsa, yükü salt UTF-8 ' e dönüştürme adımlarını tersine çevirin. Metninizi sisteminizde mümkün olduğunca UTF-8 olarak tutun. Ardından, Base64 kodlamalı UTF-8 karakterlerini gereken kodlamaya dönüştürmek için aynı işlevi kullanın. Sonra metne Base64 kod çözme uygulayın ve yükünüzü gönderin.

AS2 için yükleri dönüştürme

Bu çözümü, AS2 v2 bağlayıcısındaUnicode olmayan yüklerle de kullanabilirsiniz. AS2 'e geçirdiğiniz yükleri UTF-8 ' e dönüştürmezseniz, yük yorumu ile ilgili sorunlarla karşılaşabilirsiniz. Bu sorunlar, hatalı yorumlanan karakterler nedeniyle iş ortakları arasındaki MıC karmasıyla uyumsuzluk oluşmasına neden olabilirler.

Sonraki adımlar