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

How can i create correct line breaks in a sns sms message?

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

我也试过以下:

并将字符串编码为 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");

简单地删除所有对字符串进行编码的尝试。 .NET 字符串是 Unicode,特别是 UTF16。 PublishAsync 需要 .NET 字符串,而不是 UTF8 字节。

至于为什么会出现这个错误,是因为代码使用本地机器的代码页将字符串转换为字节,然后尝试读取这些字节,就好像它们是UTF8一样,这他们不是 - 使用 UTF8 作为系统代码页是 Windows 10 上的测试版功能,它打破了 lot 的应用程序。

短信的换行符是\nEnvironment.NewLine returns \r\n 除非你在 Linux 上使用 .NET Core。 StringBuilder.AppendLine 使用 Environment.NewLine 所以你不能使用它。

只需 String.Join 即可将多行合并为一条消息:

var message=String.Join("\n",lines);

如果您需要使用 StringBuilder,请使用 AppendFormat 在末尾附加一个带有 \n 字符的行,例如:

builder.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 request
var publishRequest = new PublishRequest
{
    PhoneNumber = phone,
    Message = message,                
};

// Send SMS
var response = await snsClient.PublishAsync(publishRequest);

我收到的消息包含:

Line1.
Line2.
Line4.

我决定花点时间把最后一行改成:

.Append("Line4ΑΒΓ£§¶\n");

我也顺利收到了这篇短信