【问题标题】:Convert escaped string to bytearray or stream; c#将转义字符串转换为字节数组或流; C#
【发布时间】:2013-05-07 20:59:30
【问题描述】:

我的输入字符串由 unicode 转义字符和常规字符混合而成。示例:

\u0000\u0003\u0000\u0013timestamp\u0011clientId\u0015timeToLive\u0017destination\u000fheaders\tbody\u0013messageId\u0001\u0006

如何将其转换为字节数组或流?

编辑:UTF+8 编码。澄清输入字符串:

Char 01: U+0000
Char 02: U+0003
Char 03: U+0000
Char 04: U+0013
Char 05: t
Char 06: i
Char 07: m
Char 08: e
Char 09: s
Char 10: t
Char 11: a
Char 12: m
Char 13: p
Char 14: U+0011
...
...    

【问题讨论】:

  • 请提供更多上下文。例如,字符串中的第一个字符实际上是 Unicode U+0000 字符,还是反斜杠?你想在流或字节数组中使用什么编码?
  • 您似乎正在尝试将二进制文件作为文本读取。
  • Encoding.Unicode 页面的“示例”部分中有一个很好的示例
  • @I4V 原始数据确实是二进制流。我无法控制的程序以这种形式将其吐出到日志中。我想将它转换回流,以便我可以使用它。
  • @RaGe 然后发布一个示例二进制数据,没有它很难说什么。

标签: c# unicode stream bytearray


【解决方案1】:

要简化转换,只需这样做:

var stream = new memoryStream(Encoding.UTF8.GetBytes(str));

或者,如果您想要一种担心可重用性的方法,请为这样的字符串创建一个Extension Method

public static class StringExtension
{
     public static Stream ToStream(this string str)
       =>new memoryStream(Encoding.UTF8.GetBytes(str))         

     //Or much better
     public static Stream ToStreamWithEncoding(this string str, Encoding encoding)
       =>new memoryStream(encoding.GetBytes(str))
}

【讨论】:

    【解决方案2】:

    好的,所以您有一个任意字符串(它包含不可打印字符的事实是无关紧要的)并且您想使用 UTF-8 将其转换为字节数组。这很容易:)

    byte[] bytes = Encoding.UTF8.GetBytes(text);
    

    或者要写入流,您通常会将其包装在StreamWriter

    // Note that due to the using statement, this will close the stream at the end
    // of the block
    using (var writer = new StreamWriter(stream))
    {
        writer.Write(text);
    }
    

    (UTF-8 是StreamWriter 的默认编码,当然你也可以明确指定。)

    我假设您确实有充分的理由以这种形式使用“文本”。我不能说我曾经发现过 U+0003(文本结束)的用途。如果正如 I4V 所建议的那样,此数据最初是二进制流,则应首先避免将其作为文本处理。将二进制数据与文本数据分开 - 当您混合它们时,引起问题。 (例如,如果您的字符串中的第四个字符是 U+00FF,那么在编码为 UTF-8 时它会以两个字节结束,这可能不是您想要的。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多