C#判断文本文件编码是ANSI还是无BOM的UTF8
2016-10-11 23:19
309 查看
Encoding GetBytesEncoding(byte[] bs) { int len = bs.Length; if (len >= 3 && bs[0] == 0xEF && bs[1] == 0xBB && bs[2] == 0xBF) { return Encoding.UTF8; } int[] cs = { 7, 5, 4, 3, 2, 1, 0, 6, 14, 30, 62, 126 }; for (int i = 0; i < len; i++) { int bits = -1; for (int j = 0; j < 6; j++) { if (bs[i] >> cs[j] == cs[j + 6]) { bits = j; break; } } if (bits == -1) { return Encoding.Default; } while (bits-- > 0) { i++; if (i == len || bs[i] >> 6 != 2) { return Encoding.Default; } } } return Encoding.UTF8; } string ReadAllFormatText(string filename) { byte[] bs = File.ReadAllBytes(filename); int len = bs.Length; if (len >= 3 && bs[0] == 0xEF && bs[1] == 0xBB && bs[2] == 0xBF) { return Encoding.UTF8.GetString(bs, 3, len - 3); } int[] cs = { 7, 5, 4, 3, 2, 1, 0, 6, 14, 30, 62, 126 }; for (int i = 0; i < len; i++) { int bits = -1; for (int j = 0; j < 6; j++) { if (bs[i] >> cs[j] == cs[j + 6]) { bits = j; break; } } if (bits == -1) { return Encoding.Default.GetString(bs); } while (bits-- > 0) { i++; if (i == len || bs[i] >> 6 != 2) { return Encoding.Default.GetString(bs); } } } return Encoding.UTF8.GetString(bs); }
相关文章推荐
- Ansi、Unicode、UTF8等编码字符串之间的转换和写入文本文件(学习中……)
- [转]在C#中判断一个文本文件的编码方式
- Ansi、Unicode、UTF8等编码字符串之间的转换和写入文本文件(学习中……)
- Ansi、Unicode、UTF8等编码字符串之间的转换和写入文本文件(学习中……)
- C# 获取文本文件的编码,自动区分GB2312和UTF8
- 解决本地文本文件上传到服务器乱码问题(C#),ANSI转UTF-8编码
- 在无法判断ANSI还是UICODE编码方式下的字符函数的使用
- C# 获取文本文件的编码,自动区分GB2312和UTF8
- 判断文本文件编码的C#源码
- 正确读取 ANSI 编码的文本文件 UTF8
- C#获取文本文件的编码,自动区分GB2312和UTF8
- C#获取文本文件的编码,自动区分GB2312和UTF8
- PHP自动判断字符串是gb2312还是utf8编码
- 判断一个文本文件是ANSI还是Unicode
- C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)
- 黄聪:PHP自动判断字符串是gb2312还是utf8编码
- 解决本地文本文件上传到服务器乱码问题(C#),ANSI转UTF-8编码
- Ansi、Unicode、UTF8等编码字符串之间的转换和写入文本文件(学习中……)
- C#实现获取文本文件的编码的一个类(区分GB2312和UTF8)-来自转载收集
- Ansi、Unicode、UTF8等编码字符串之间的转换和写入文本文件(学习中……)