登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

秒大刀 博客

好好学习 天天向上

 
 
 

日志

 
 
 
 

C# 猜测字符串的编码  

2013-06-06 21:11:31|  分类: C# |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
C 猜测字符串的编码 - 秒大刀 - 秒大刀 博客
 

    以下代码可从字节流中猜测出正确的字符串编码。优先采用BOM探测,失败后再尝试采用utf-8无BOM和本地默认编码进行解码。

public static string GuessEncoding(byte[] data)
{
Encoding encoding;
return GuessEncoding(data, out encoding);
}

public static string GuessEncoding(byte[] data, out Encoding encoding)
{
foreach (var e in new Encoding[] { Encoding.UTF8, Encoding.Unicode, Encoding.BigEndianUnicode })
{
encoding = e;
var pre = encoding.GetPreamble();
if (Enumerable.SequenceEqual(data.Take(pre.Length), pre))
return encoding.GetString(data, pre.Length, data.Length - pre.Length);
}

foreach (var e in new Encoding[] { new UTF8Encoding(false), Encoding.Default })
{
encoding = e;
var str = encoding.GetString(data);
if (Enumerable.SequenceEqual(encoding.GetBytes(str), data))
return str;
}

throw new NotSupportedException();
}

    当然我们推荐在所有的系统中优先采用utf-8编码进行交流,在需要定长编码的情况下采用Unicode编码。“猜编码”毕竟是一件纠结的事情
    绝不建议再采用GB2312GBKBig5等各种本地编码页进行新系统开发。



  评论这张
 
阅读(1553)| 评论(0)

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018