【问题标题】:byte array has whitespace that can't be removed字节数组有无法删除的空格
【发布时间】: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


【解决方案1】:

您似乎正在尝试将 unicode/utf16 读取为 utf8,它最终会以看起来像空格但实际上是空字符的形式结束。

您可以改用 unicode 编码,这应该会得到您想要的结果。

message = System.Text.Encoding.Unicode.GetString(binaryString);

【讨论】:

    【解决方案2】:
      byte[] data = new byte[1024];
       clientSocket.Receive(data);
           
     string returndata = System.Text.Encoding.ASCII.GetString(data, 0, data.Length);
     returndata = returndata.Trim('\0');
    

    【讨论】:

    • 在 Stack Overflow 上不鼓励仅使用代码的答案,因为它们没有解释它如何解决问题。请编辑您的答案以解释此代码的作用以及它如何回答问题,以便它对 OP 以及其他有类似问题的用户有用。
    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多