1. 程式人生 > >C#中StreamReader讀取中文時出現亂碼問題總結

C#中StreamReader讀取中文時出現亂碼問題總結

utf8編碼 新的 conf window linu img utf8 enc ref

之前有一篇文章“ C#讀取及寫入配置文件教程”http://blog.csdn.net/lisenyang/article/details/47291083)當中有一個問題就是在讀取配置文件時候中文出現亂碼情況。這是為什麽呢?原因是自Windows 2000之後的操作系統在文件處理時默認編碼採用Unicode。所以.NET文件的默認編碼也是Unicode。除非另外指定,StreamReader的默認編碼為Unicode,而不是當前系統的ANSI代碼頁。可是文檔大部分還是以ANSI編碼存儲,中文文本使用的是GB2312,所以才造成中文亂碼。
首先。先和大家一起了解一個東西---“系統的當前 ANSI 代碼頁編碼”

,假設你要處理ANSI且codepage為GB2312的文件。或者其它已知編碼類型的I/O接口。那麽最好直接寫Encoding.GetEncoding("GB2312"),由於Encoding.Default可能會變,而假設是一個全新的系統,則最好使用“Encoding.UTF8”,由於UTF8能夠兼容世界上絕大多數語種。且效率較好,.NET默認也是用UTF8編碼類型!

我們看下查看和改動當前系統的ANSI代碼頁編碼:

Linux系統查看locale的方法:在終端輸入locale
windows查看代碼頁方法:在cmd.exe輸入chcp,或者右鍵cmd.exe屬性查看。

改動locale:
Linux系統改動配置文件/etc/sysconfig/i18n或/etc/sysconfig/language
Windows在開始-控制面板-區域和語言選項-選擇一個語言

改動session local的方法:
windows在CMD命令行輸入 mode con cp select=437
linux在終端export LANG=zh_CN.UTF8

如圖:

技術分享


之前我的代碼例如以下:

技術分享



改動後代碼例如以下:

技術分享



C#中StreamReader讀取中文時出現亂碼問題總結