前言:
記得前不久,我在公司封閉式開發的日子裡,我在宿舍的機子,被同學弄得滿身病毒,其中之一是病毒在所有的html裡者插入了一段iframe
之後我一不小心..編了段小程式來替換掉所有的iframe,當時忘了檔案編碼問題..
現在打開才發現一大堆亂碼在裡面
現在發現了..當然是要解決了:
簡單看了一下檔案流讀出來的位元組.做了簡單的檔案類型編碼判斷
代碼如下:
1
/// <summary>
2
/// 獲得檔案編碼
3
/// </summary>
4
/// <param name="content">檔案流的位元組數組</param>
5
/// <returns>字元編碼</returns>
6
public static encoding getfileencoding(byte[] content)
7
{
8
if (content.length > 0)
9
{
10
switch (content[0])
11
{
12
case 104:
13
return encoding.default;
14
case 255:
15
return encoding.unicode;
16
case 254:
17
return encoding.bigendianunicode;
18
case 239:
19
return encoding.utf8;
20
default:
21
22
}
23
}
24
return encoding.default;
25
}
這裡隻簡單做了一下.有更複雜,自己擴充去吧!
反正代碼都寫到了..再給出兩段檔案的讀和寫吧
/// 讀檔案流
/// <param name="stream">檔案流;如:file.openread(filecurrentpath)</param>
/// <param name="encoding">字元編碼;如:encoding.utf8</param>
/// <returns>流字元串</returns>
public static string readfromstream(filestream stream, encoding encoding)
byte[] content = new byte[stream.length];
stream.read(content, 0, content.length);
stream.close();
stream = null;
if (encoding == encoding.default)
encoding = getfileencoding(content);
return encoding.getstring(content);
public static string readfromstream(filestream stream,out encoding encoding)
encoding = getfileencoding(content);
/// <summary>
/// 寫檔案流
/// <param name="stream">檔案流;如:file.openwrite(filecurrentpath)</param>
/// <param name="text">要寫的字元串</param>
/// <returns>bool</returns>
public static bool writetostream(filestream stream, encoding encoding, string text)
try
byte[] content = encoding.getbytes(text.replace("\n", "\r\n"));
stream.setlength(content.length);
stream.write(content, 0, content.length);
stream.close();
return true;
catch
return false;
以上代碼沒有版權,想用拿去用,想改拿去改!