字节数组到字符串 - 一种更好的方法[重复]

Posted

技术标签:

【中文标题】字节数组到字符串 - 一种更好的方法[重复]【英文标题】:Byte array to string - a better method [duplicate] 【发布时间】:2012-12-19 09:59:57 【问题描述】:

可能重复:byte[] to string in c#

我有一个从流中读取的字节数组。我想把它转换成字符串。

这对我有用:

var str= new string(bytearr.Select(x=>(char)x).ToArray());

但我觉得有更好的方法吗?有吗?

【问题讨论】:

【参考方案1】:

你可以使用Encoding的内置函数:

string myString = Encoding.UTF8.GetString(bytearr);

http://msdn.microsoft.com/en-us/library/aa332098(v=vs.71).aspx

【讨论】:

【参考方案2】:

你应该使用Encoding的实例

来自msdn

public UTF8Encoding(
    bool encoderShouldEmitUTF8Identifier,
    bool throwOnInvalidBytes
)

参数

encoderShouldEmitUTF8Identifier

类型:System.Boolean true 指定提供 Unicode 字节顺序标记;否则为假。

throwOnInvalidBytes

类型:System.Boolean

true 指定在检测到无效编码时抛出异常;否则为假。

所以使用

   var encoding = new UTF8Encoding(false,true);

encoding.GetString (byteArr);

【讨论】:

【参考方案3】:

你可以使用System.Text.Encoding

string result = Encoding.UTF8.GetString(bytearr);

【讨论】:

【参考方案4】:
var str = System.Text.Encoding.UTF8.GetString(byte[])

【讨论】:

【参考方案5】:
Encoding.UTF8.GetString(bytearr);

您需要知道正确的编码并使用它,UTF8 只是一个示例。根据对你有用的,我猜你要么有 UTF8 要么 ASCII。

【讨论】:

这确实不是看起来像一个 UTF-8 编码流。例如,UTF-8 中的字符串naïve 将是6E - 61 - C3 AF - 76 - 65。注意char的个数与字节数不对应(因为'ï'占用两个字节)。所以我想说他应该使用Encoding.ASCII 或者类似Encoding.GetEncoding(1252) 的东西(如果他知道要使用什么Windows 代码页(如1252“西欧(Windows)”);可以很好地与naïve 配合使用)。 @JeppeStigNielsen,正确,关键是 OP 代码不安全,他需要知道编码。由于 ASCII 和 UTF8 在代码点 128 下完全相同,因此 UTF8 解决方案适用于纯 ASCII(没有字符扩展名)它说明了文本实际上是 UTF-8 的可能性。跨度>

以上是关于字节数组到字符串 - 一种更好的方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

十六进制字符串到字节数组 C# [重复]

C#字节数组到字符串数组[重复]

字节数组字符串到字节数组? [复制]

字符串到字节数组类型转换[重复]

字节数组到十六进制字符数组的转换[重复]

字节数,字符串长度,字符个数的区别?