做个了文件分割软件,但是在分割文本小说时,发现分割出来的子文件并没有使用源文件的编码,
却是使用的UTF-8,在editplus中看倒是也没有什么,但是在MOBIPORKET READER中打开却是乱码,
因此,决定找到问题,修改一下,经过搜索和查看MSDN,
总结如下,
使用
Code
public StreamReader (
string path,
bool detectEncodingFromByteOrderMarks
)
构造函数使用StreamReader就可以了,这样在StreamReader的实例中属性CurrentEncoding就包含了,文件的原始编码信息
扩展一下:
搜索的时候发现文本文件的开头几个字节就可以用来文件使用的编码情况,在C#中使用下面:
Code
1 public class GetPreamble
2 {
3 public Dictionary<string, string> GetPreambles(bool hasPreamble)
4 {
5 Dictionary<string, string> result = new Dictionary<string, string>();
6 EncodingInfo[] encs = Encoding.GetEncodings();
7 foreach (EncodingInfo ei in encs)
8 {
9 Encoding var = Encoding.GetEncoding(ei.CodePage);
10 byte[] preamble = var.GetPreamble();//得到文件的开头几个能表示编码情况的字节
11 StringBuilder sb = new StringBuilder();
12
13 if (hasPreamble)
14 {
15 if (preamble.Length == 0)
16 {
17 continue;
18 }
19 }
20 foreach (byte bt in preamble)
21 {
22 sb.AppendFormat("{0:X2} ", bt);
23 }
24 result.Add(ei.Name + "( " + ei.CodePage + " )", sb.ToString());
25
26 sb.Remove(0, sb.Length);
27 }
28 return result;
29 }
30
31 }
utf-16( 1200 ) |
FF FE |
unicodeFFFE( 1201 ) |
FE FF |
utf-32( 12000 ) |
FF FE 00 00 |
utf-32BE( 12001 ) |
00 00 FE FF |
utf-8( 65001 ) |
EF BB BF |
得到的记过如上表,很多的编码没有对应的Preamble字节数组...