将转义字符串转换为字节数组或流;c#



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

u0000u0003u0000u0013timestampu0011clientIdu0015timeToLiveu0017destinationu000fheaderstbodyu0013messageIdu0001u0006

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

编辑: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
...
...    

好了,您已经得到了一个任意字符串(它包含不可打印字符的事实无关紧要),并且您希望使用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时,它将以两个字节结束,这可能不是您想要的。)

简化转换:

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

或者如果你想要一种关注可重用性的方法,创建一个像这样的字符串扩展方法:

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))
}

相关内容

  • 没有找到相关文章

最新更新