You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中如何将含Unicode的字符串转为SOAP短信所需十六进制NCR格式?

解决ASCII+Unicode字符串转十六进制NCR格式及SOAP设置问题

核心转换逻辑

要完成混合字符的NCR转换,核心是逐个处理字符串中的每个字符:

  • ASCII字符(码点0~127):可直接保留原字符(SOAP原生支持,且多数第三方接口允许);若接口要求所有字符都转NCR,也统一处理即可。
  • 非ASCII字符(码点>127):将字符的Unicode码点转为十六进制,格式化为&#xHHHH;(HHHH为4位或更长的十六进制值,如emoji这类超出U+FFFF的字符会用6位)。

代码实现示例

Python版本(简洁高效)

def convert_to_ncr(text):
    result = []
    for char in text:
        code = ord(char)
        if code <= 127:
            result.append(char)
        else:
            # 转十六进制,去掉前缀0x,自动适配字符长度
            hex_code = hex(code)[2:]
            result.append(f'&#x{hex_code};')
    return ''.join(result)

测试案例:
输入:"Hello 世界!😀"
输出:"Hello &#x4e16;&#x754c;&#xff01;&#x1f600;"

如果接口要求所有字符都转NCR,去掉判断逻辑即可:

def convert_all_to_ncr(text):
    return ''.join([f'&#x{hex(ord(c))[2:]};' for c in text])

Java版本

public class NcrConverter {
    public static String convertToNcr(String text) {
        StringBuilder sb = new StringBuilder();
        for (char c : text.toCharArray()) {
            int codePoint = (int) c;
            if (codePoint <= 127) {
                sb.append(c);
            } else {
                sb.append("&#x").append(Integer.toHexString(codePoint)).append(";");
            }
        }
        return sb.toString();
    }
}

SOAP请求中的设置

  1. DataCoding字段:在SOAP信封的请求参数里,将DataCoding的值设为2,比如:
<soapenv:Envelope ...>
    <soapenv:Body>
        <SendSMSRequest>
            <DataCoding>2</DataCoding>
            <MessageContent>Hello &#x4e16;&#x754c;&#xff01;</MessageContent>
            <!-- 其他参数:手机号、发送时间等 -->
        </SendSMSRequest>
    </soapenv:Body>
</soapenv:Envelope>
  1. 编码注意:确保SOAP请求的Content-Type设置为text/xml; charset=utf-8,避免字符编码混乱。

注意事项

  • 十六进制字母的大小写:多数接口不区分大小写(如&#x4E16;和&#x4e16;都可),若有明确要求按第三方文档调整。
  • 特殊字符:部分ASCII控制字符(如换行、制表符)可能也需要转义,若遇到发送失败的情况,可尝试将这类字符也转为NCR格式。

内容的提问来源于stack exchange,提问作者user2399378

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 20:40:16