如何在 sns 短信中创建正确的换行符?
How can i create correct line breaks in a sns sms message?
我正在使用 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");
简单地删除所有对字符串进行编码的尝试。 .NET 字符串是 Unicode,特别是 UTF16。 PublishAsync
需要 .NET 字符串,而不是 UTF8 字节。
至于为什么会出现这个错误,是因为代码使用本地机器的代码页将字符串转换为字节,然后尝试读取这些字节,就好像它们是UTF8一样,这他们不是 - 使用 UTF8 作为系统代码页是 Windows 10 上的测试版功能,它打破了 lot 的应用程序。
短信的换行符是\n
。 Environment.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");
我也顺利收到了这篇短信
我正在使用 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");
简单地删除所有对字符串进行编码的尝试。 .NET 字符串是 Unicode,特别是 UTF16。 PublishAsync
需要 .NET 字符串,而不是 UTF8 字节。
至于为什么会出现这个错误,是因为代码使用本地机器的代码页将字符串转换为字节,然后尝试读取这些字节,就好像它们是UTF8一样,这他们不是 - 使用 UTF8 作为系统代码页是 Windows 10 上的测试版功能,它打破了 lot 的应用程序。
短信的换行符是\n
。 Environment.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");
我也顺利收到了这篇短信