C# 如何将字节数组转换为字符串

C# 如何将字节数组转换为字符串,c#,.net,C#,.net,我有一个字节数组,它是从FileStream.Read返回的,我想把它转换成字符串。我不是100%确定编码-它只是我保存到磁盘上的一个文件-我如何进行转换?是否有一个.NET类可以读取字节顺序标记并为我计算出编码?System.IO.File.ReadAllText执行您想要的操作。请参阅 由于字符串是Unicode,因此必须在转换时指定编码。文本流甚至ReadAllText内部都有一个活动的编码,通常是一些合理的默认值。尝试以下方法: buffer = Encoding.Convert( En

我有一个字节数组,它是从FileStream.Read返回的,我想把它转换成字符串。我不是100%确定编码-它只是我保存到磁盘上的一个文件-我如何进行转换?是否有一个.NET类可以读取字节顺序标记并为我计算出编码?

System.IO.File.ReadAllText执行您想要的操作。

请参阅


由于字符串是Unicode,因此必须在转换时指定编码。文本流甚至ReadAllText内部都有一个活动的编码,通常是一些合理的默认值。

尝试以下方法:

buffer = Encoding.Convert( Encoding.GetEncoding("iso-8859-1"), Encoding.UTF8, buffer );
newString = Encoding.UTF8.GetString( buffer, 0, len );

你对这个档案了解多少?真的可能是编码吗?如果是这样,您需要使用启发式来猜测编码。如果是UTF-8、UTF-16或UTF-32,那么

new StreamReader(new MemoryStream(bytes), true)
将自动为您检测编码。如果你真的不知道编码的话,文本是非常讨厌的。在很多情况下,您可能只是猜测而已。

如果File.ReadAllText能够正确读取文件,那么您有几个选项

您可以异步调用File.ReadAllText,而不是调用BeginRead:

    delegate string AsyncMethodCaller(string fname);

    static void Main(string[] args)
    {
        string InputFilename = "testo.txt";
        AsyncMethodCaller caller = File.ReadAllText;
        IAsyncResult rslt = caller.BeginInvoke(InputFilename, null, null);

        // do other work ...

        string fileContents = caller.EndInvoke(rslt);
    }

或者,您可以从字节数组创建一个MemoryStream,然后在其上使用StreamReader。

没有简单的方法获得编码,但如上所述,使用

string str = System.Text.Encoding.Default.GetString(mybytearray);
如果你不知道编码是什么。如果您在欧洲,ISO-8859-1可能就是您的编码

string str = System.Text.Encoding.GetEncoding("ISO-8859-1").GetString(mybytearray);

如果可以的话,我会这样做,但不幸的是,我需要使用BeginRead方法进行异步操作,该方法只返回一个字节数组……这样就足够了。在这种情况下,jon skeet下面或上面的答案现在可能是好的。另外ReadAllText假设UTF-8.MSDN for ReadAllText状态是它自动检测的:此方法尝试根据字节顺序标记的存在自动检测文件的编码。编码格式UTF-8和UTF-32都可以检测到大端和小端。为什么这比只使用编码要好。GetEncodingiso-8859-1.GetString。。。首先?关键是OP不知道编码是什么。