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

时间:2009-03-31 05:03:02

标签: c# .net

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

6 个答案:

答案 0 :(得分:5)

请参阅how-to-guess-the-encoding-of-a-file-with-no-bom-in-net

由于字符串是Unicode,因此必须指定转换时的编码。文本流(偶数ReadAllText())内部有一个有效的编码,通常是一些合理的默认值。

答案 1 :(得分:1)

尝试这样的事情:

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

答案 2 :(得分:1)

您对该文件了解多少?它真的可以任何编码吗?如果是这样,您需要使用启发式方法来猜测编码。如果它将是UTF-8,UTF-16或UTF-32那么

new StreamReader(new MemoryStream(bytes), true)

会自动检测您的编码。如果您真的不知道编码,那么文本非常讨厌。很多情况下你真的会猜测。

答案 3 :(得分:1)

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

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

    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

答案 4 :(得分:1)

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

string str = System.Text.Encoding.Default.GetString(mybytearray);

如果您不知道编码是什么。如果你在欧洲,ISO-8859-1可能就是你的编码。

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

答案 5 :(得分:0)

System.IO.File.ReadAllText做你想要的。