C#中StreamReader讀取中文時出現亂碼問題總結
阿新 • • 發佈:2017-05-06
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讀取中文時出現亂碼問題總結