在c#中将带有unicode字符的字符串转换为特定格式的十六进制

问题描述 投票:0回答:1

我正在与第三方合作发送短信。 信息通过 HTTPS 通过 SOAP 信封发送给他们。

如果文本包含 Unicode 字符,则需要将 DataCoding 设置为 2(即 Unicode),并且根据我的理解,文本需要以某种格式发送。此格式是十六进制的 NCR(数字字符引用),带有“&#xHHHH;”每个 unicode 字符的格式。

我对 SOAP 和这种格式不太熟悉,如何对同时包含 Ascii 和 Unicode 字符的字符串进行转换?

c# unicode hex ncr
1个回答
0
投票

以下内容可能会解决您的编码任务:

using System;
using System.Text;

public class Test
{
    public static void Main()
    {
        string encoded = 
            ncrEncode("My string with äöüÄÖÜß");
            
        Console.WriteLine(encoded);
    }
    
    public static string ncrEncode(string s)
    {
        StringBuilder sb = new();
        
        foreach(char c in s)
        {
            uint u = (uint)c;
            if (u > 127)
            {
                sb.Append($"&#x{u.ToString("X4")}");
            }
            else
            {
                sb.Append(c);
            }
        }
        
        return sb.ToString();
    }
}

要编码的字符串逐字符循环。 代码大于 127 的字符将作为十六进制字符串附加。

© www.soinside.com 2019 - 2024. All rights reserved.