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

德语特殊字符经WebAPI发送后显示为问号的问题排查

问题:WebAPI发送含德语特殊字符的消息出现乱码

使用WebAPI发送消息时,德语特殊字符(äÄöÖüÜß)在收件方显示为?,相关代码如下:

string subject = "Test message for German special characters (äÄöÖüÜß)";
var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(subject);
subject = utf8.GetString(utfBytes, 0, utfBytes.Length);

string aktz_sender = "test Absender";
string aktz_rec = "Test Empfänger";
string receiverIdent = "Test_Identity";
string att_type = "Test_Type";

string result = baseClass.SendMessage(subject, aktz_sender, aktz_rec, 
                                      receiverIdent, att_type, listOfAttachment);

if (result == "true")
    MessageBox.Show("Message send successfully");

listOfAttachment.Clear();

现象:消息发送成功,但收件方主题显示为:

Test message for German special characters (???????)

API厂商说明:API全程使用UTF-8编码,需确保发送前字符已正确编码。


问题分析与解决办法
  • 删除冗余的编码转换代码
    你写的那段UTF-8字节转换代码完全没有作用:C#的string本质是UTF-16编码的Unicode序列,将其转成UTF-8字节再转回字符串,不会改变字符内容,反而可能引入潜在问题,直接删掉即可。

  • 核心问题:确保SendMessage以UTF-8编码发送数据
    问题的关键在于baseClass.SendMessage内部可能没有正确将字符串以UTF-8格式传递给API,需要针对性检查:

    • 如果使用HttpClient发送请求:构造请求内容时必须明确指定UTF-8编码,例如用StringContent时传入Encoding.UTF8:
      var content = new StringContent(jsonPayload, Encoding.UTF8, "application/json");
      
    • 如果是拼接URL参数:不能直接把特殊字符拼进URL,必须用Uri.EscapeDataString(subject)编码(该方法默认使用UTF-8),避免字符被错误转义。
    • 如果是设置邮件主题类的HTTP头:需遵循RFC 2047规范对UTF-8主题进行编码,格式示例:
      string encodedSubject = $"=?UTF-8?B?{Convert.ToBase64String(Encoding.UTF8.GetBytes(subject))}?=";
      
      很多邮件客户端需要这种编码才能正确识别非ASCII字符。
  • 检查代码文件的保存编码
    确认你的C#代码文件是以UTF-8编码保存的(Visual Studio可通过「文件→高级保存选项」设置)。如果文件保存为GB2312等其他编码,字符串中的德语特殊字符在编译阶段就会被错误转换,导致后续处理失效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:01:32