如何在 sns 短信中创建正确的换行符?

我正在使用AWS .NET-SDK通过AWS SNS 服务发送 SMS 消息。到目前为止,一切都很好; 但是当我使用换行符时,我会?在短信中的换行符开始之前看到此时的字符。在该字符之后,将按预期添加换行符。没有这个字符是否有可能换行?

我也尝试过以下操作:

  • StringBuilder.AppendLine,

  • "\\n",

  • "\\r\\n",

  • @"\n",

  • @"\r\n",

  • Environment.NewLine

并将字符串编码为UTF-8。

不起作用的示例:

// Create message string

var sb = new StringBuilder();

sb.AppendLine("Line1.");

sb.Append("Line2.\\n");

sb.AppendLine(Environment.NewLine);

sb.Append(@"Line4\n");


// Encode into UTF-8

var utf8 = UTF8Encoding.UTF8;

var stringBytes = Encoding.Default.GetBytes(sb.ToString());

var decodedString = utf8.GetString(stringBytes);

var message = decodedString;


// Create request

var publishRequest = new PublishRequest

{

    PhoneNumber = "+491234567890",

    Message = message,

    Subject = "subject",

    MessageAttributes = "Promotional"

};


// Send SMS

var response = await snsClient.PublishAsync("topic", message, "subject");


慕标5832272
浏览 194回答 1
1回答

阿波罗的战车

只需删除所有对字符串进行编码的尝试即可。.NET 字符串已经是 Unicode,特别是 UTF16。PublishAsync需要 .NET 字符串,而不是 UTF8 字节。至于为什么会出现这个错误,是因为代码使用本地计算机的代码页将字符串转换为字节,然后尝试将这些字节当作UTF8读取,但事实并非如此——使用UTF8作为系统代码页是一个测试版功能在 Windows 10 上,这会破坏很多应用程序。SMS 的换行符是\n。除非您在 Linux 上使用 .NET Core,否则Environment.NewLine返回。StringBuilder.AppendLine使用所以你不能使用它。\r\nEnvironment.NewLine除了 String.Join 之外,您不需要任何其他东西即可将多行组合成一条消息:var message=String.Join("\n",lines);如果您需要使用 StringBuilder,请使用在末尾AppendFormat附加一个带有字符的行,例如:\nbuilder.AppendFormat("{0}\n",line);更新我能够使用以下代码发送包含换行符的短信:var region = Amazon.RegionEndpoint.EUWest1;var  snsClient = new AmazonSimpleNotificationServiceClient(region);var sb = new StringBuilder()                .Append("Line1.\n")                .Append("Line2.\n")                .Append("Line4\n");var message = sb.ToString();// Create requestvar publishRequest = new PublishRequest{    PhoneNumber = phone,    Message = message,                };// Send SMSvar response = await snsClient.PublishAsync(publishRequest);我收到的消息包含:Line1.Line2.Line4.我决定花点时间,将最后一行更改为:.Append("Line4ΑΒΓ£§¶\n");我也毫无问题地收到了这条短信
打开App,查看更多内容
随时随地看视频慕课网APP