【发布时间】:2019-08-05 19:58:06
【问题描述】:
我正在尝试从中获取消息正文的数据库中有一个 Service Broker 队列。结果有不必要的空格,无论我尝试什么都无法删除。我只是想折叠所有内容并删除所有额外的空格。我尝试过正则表达式、修剪、替换等。
队列中的原始数据:
0x31002C0020003200
消息接收者:
public string RecieveMessage()
{
string message = string.Empty;
byte[] binaryString = new byte[100];
using (var conn = new SqlConnection(connectionString))
{
conn.Open();
var sql = "RECEIVE TOP(1) message_body FROM [dbo].[Queue]";
var cmd = new SqlCommand(sql, conn);
SqlDataReader reader = cmd.ExecuteReader();
try
{
while (reader.Read())
{
binaryString = (byte[])reader[0];
}
message = System.Text.Encoding.UTF8.GetString(binaryString).Trim('\0');
}
catch (SqlException e)
{
Console.WriteLine(e);
}
catch (InvalidOperationException ex)
{
Console.WriteLine(ex);
}
finally
{
reader.Close();
conn.Close();
}
}
return message;
}
Console.WriteLine(message); 的示例输出
2 3 5 6 5 3, J o h n D o e & A s o c i a t e s
【问题讨论】:
-
编码错误?试试
Encoding.Unicode.GetString而不是UTF8 -
您确定您的控制台输出支持 UTF8 字符串吗?另外,您确定这些空格确实是空格而不是其他字符吗?我会仔细检查输出数组中的确切字节以进行验证。
-
@JonathonChase
Unicode成功了。好消息,我不敢相信我在发布之前没有尝试过。我尝试了几个版本的 UTF 和 ASCII 作为我的编码,并认为它一定是别的东西。谢谢!如果您想发布完整的答案,我会接受。
标签: c# .net-core service-broker