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);
展开
 我来答
zengxiaosyz
2012-11-01 · 超过30用户采纳过TA的回答
知道答主
回答量:152
采纳率:0%
帮助的人:75.5万
展开全部
byte[] 是无法区分编码的,那是存入数据时要注意的事情,而不是读取的时候!
即你用什么码存进去的就应该用什么码取出来

能不能换个思路:
把编码方式也存入byte[]数组的头部,跟数据一起传递过来,
在获取的时候再截取头部信息,然后再按照具体的编码进行转换
更多追问追答
追问
由於需求中无法控制和得知byte[]数据的原编码。
可否枚举目前所有的编码?每一种编码都转换一次,看看哪一个正确?
追答
可以实现所要的功能
Jarhf
2012-11-01 · TA获得超过1862个赞
知道小有建树答主
回答量:1736
采纳率:25%
帮助的人:1033万
展开全部
无法得知,因为字节流本身没有包含任何编码信息,只有文件头才有标明编码.
最多只能分析不同编码的字节流有一些有规则的特征码但不足以作为识别编码方式,而且代价也太大!
更多追问追答
追问
由於需求中无法控制和得知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发给你
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式