C# 如何将byte[]用正确字符编码转为字符串?
我要写一个Function:///<summary>///将输入的byte[]转换为正确的字符串。///</summary>///<paramname="bBuffer"...
我要写一个Function:
/// <summary>
/// 将输入的byte[]转换为正确的字符串。
/// </summary>
/// <param name="bBuffer">文本字符串byte[]数据</param>
/// <returns>输出正确的文本字符串</returns>
public static string Convert(byte[] bBuffer)
{
//判断bBuffer是什麼编码的文本
//bBuffer可能是GB2312/BIG5/UTF8/Unicode/ASCII/......等等编码文本的byte[]数据,如何得知bBuffer的正确编码?
return Encoding.GetEncoding(正确编码).GetString(bb);
}
return Encoding.GetEncoding(正确编码).GetString(bBuffer); 展开
/// <summary>
/// 将输入的byte[]转换为正确的字符串。
/// </summary>
/// <param name="bBuffer">文本字符串byte[]数据</param>
/// <returns>输出正确的文本字符串</returns>
public static string Convert(byte[] bBuffer)
{
//判断bBuffer是什麼编码的文本
//bBuffer可能是GB2312/BIG5/UTF8/Unicode/ASCII/......等等编码文本的byte[]数据,如何得知bBuffer的正确编码?
return Encoding.GetEncoding(正确编码).GetString(bb);
}
return Encoding.GetEncoding(正确编码).GetString(bBuffer); 展开
2个回答
展开全部
无法得知,因为字节流本身没有包含任何编码信息,只有文件头才有标明编码.
最多只能分析不同编码的字节流有一些有规则的特征码但不足以作为识别编码方式,而且代价也太大!
最多只能分析不同编码的字节流有一些有规则的特征码但不足以作为识别编码方式,而且代价也太大!
更多追问追答
追问
由於需求中无法控制和得知byte[]数据的原编码。
可否枚举目前所有的编码?每一种编码都转换一次,看看哪一个正确?
追答
这个倒还不至于用这么苯的方法。从字节流编码推断 编码的方法网上有,我找到一个类库可以用,对于 特殊字符串(比如经典的“联通” 记事本乱码现象)无能为力,不过大部分情况下不会影响使用。
using NChardet;
public static string GetCharset(byte[] buffer)
{
Detector det = new Detector(PSMDetector.ALL);
MyCharsetDetectionObserver cdo = new MyCharsetDetectionObserver();
det.Init(cdo);
byte[] buf = new byte[1024];
int index = 0;
bool done = false;
bool isAscii = true;
while (index < buffer.Length)
{
buf = buffer.Skip(index).Take(1024).ToArray();
if (isAscii)
isAscii = det.isAscii(buf, buf.Length);
if (!isAscii && !done)
done = det.DoIt(buf, buf.Length, false);
index += 1024;
}
det.DataEnd();
if (isAscii)
{
return "ASCII";
}
else if (cdo.Charset != null)
{
return cdo.Charset;
}
return "Unknow";
}
你留下邮箱,我把 dll发给你
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询