程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> .NET實例教程 >> ASP.NET中StreamReader、FileStream、StreamWriter操作文件編碼問題

ASP.NET中StreamReader、FileStream、StreamWriter操作文件編碼問題

編輯:.NET實例教程


          最近做一個網站項目,要把文章信息頁面生成靜態頁面,就是通過.NET中 StreamReader、FileStream、StreamWriter操作模板文件生成靜態頁面。到最後要與另一個系統合在一起,但2個系統編碼不同,新做的系統的編碼為UTF-8,生成靜態頁面也為UTF-8, 以前的系統為GB2312,要把新系統的頭部文件包含的丟系統中,由於編碼不同,會出現亂碼,想了很多方法,嘗試了很多次,最後終於找到解決方法了(在網上搜了很久,也沒有找到,貢獻給大家)。是不是很急了,:-),別急,順便把.Net生成靜態頁面也寫給大家,呵呵!

1、生成靜態頁面需要模板支持、例如模板代碼如下:

Template.Html

<Html>

<head><title>{$_Title}</title></head>

<body>

<div>{$_Content}</div>

</body>

</Html>

其中{$_Title}和{$_Content}為要替換的內容。

2、首先要通過StreamReader類讀取模板信息,代碼如下

StreamReader sr = new StreamReader("Template.Html", System.Text.Encoding.Default); // 讀取模板文件信息,設置編碼為默認編碼,我測試很多次,這設置編碼,於我們最後生成靜態文件沒有直接關系。

3、建立StreamBuilder對象(在多次操作字符串時,使用StreamBuilder是很有效率的。),代碼如下

StreamBuilder sb = new StreamBuilder(sr.ReadToEnd());

    // 讀取模板信息所有文件, 記得要引入Text命名空間因為StreamBuilder 在Text中

sr.Close() ;    // 關閉代碼的流操作,並釋放所占用的資源 ,一定要記得關閉呀。

4、這一步就是要把我們要替換的信息替換掉,一般情況下是查詢數據庫,把相應位置替換掉,這就簡單一點了:

     sb.Replace("{$_Title}", ".Net生成靜態頁面編碼問題");    // 替換Title

     sb.Replace("{$_Content}", "信息正文");     // 自己查詢數據庫替換,:-)

5、到上一步沒有什麼太大問題,編碼轉換主要是下面這一步了。

      FileStream fs = new FileStream("Test.html", FileMode.Create); /* 其中Test.Html是我們要生成的靜態頁面文件名稱,FileMode.Create為若要生成的文件已經存在,覆蓋掉。*/

     StreamWriter    sw = new StreamWriter(fs, Encoding.GetEncoding("gb2312")); /* 這一步很重要,在這我們經常會省略編碼,這也是輸出文件的編碼格式,是這篇文章的要點,就是Encoding.GetEncoding("gb2312"),    輸出文件為GB2312編碼,若是 Encoding.GetEncoding("utf-8") 輸出文件為UTF-8 文件,這的介紹網上資料很少,希望能給大家幫助,呵呵。*/

$False$

    sw.WriteLine(sb);    // 輸出信息。

    sw.Close(); // 關閉數據流並釋放所占資源

    fs.Close(); // 關閉並釋放資源,

    //    到此要結束了,大家可以測試一下。希望能給大家幫助,若有不足之處,請指導,謝謝!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved