天天看點

檔案編碼

前言:

      記得前不久,我在公司封閉式開發的日子裡,我在宿舍的機子,被同學弄得滿身病毒,其中之一是病毒在所有的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;

檔案編碼
檔案編碼

以上代碼沒有版權,想用拿去用,想改拿去改!

繼續閱讀