我正在与第三方合作发送短信。 信息通过 HTTPS 通过 SOAP 信封发送给他们。
如果文本包含 Unicode 字符,则需要将 DataCoding 设置为 2(即 Unicode),并且根据我的理解,文本需要以某种格式发送。此格式是十六进制的 NCR(数字字符引用),带有“&#xHHHH;”每个 unicode 字符的格式。
我对 SOAP 和这种格式不太熟悉,如何对同时包含 Ascii 和 Unicode 字符的字符串进行转换?
以下内容可能会解决您的编码任务:
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 的字符将作为十六进制字符串附加。