當咱們要把一個字符串轉化爲byte[]時,習慣性的會用到Encoding.Default.GetBytes(string s)這靜態方法。html
把一個byte[]數組轉化爲字符串時,也會習慣性的用到Encoding.Default.GetString(byte[] byte)這個方法。數組
ok,若是你的客戶端(C/S)和服務端用的是相同的操做系統語言,這樣是不會用問題。編碼
若是不一樣呢,不一樣就出問題,不管用什麼編碼解析都會出問題,好比utf-8,Unicode解析都是亂碼。spa
下面就是要說的內容了:操作系統
首先咱們看Encoding.Default返回的是什麼東西,MSDN給出的是:3d
獲取操做系統的當前 ANSI 代碼頁的編碼。code
那麼什麼是ANSI代碼頁編碼:百度查吧htm
不一樣的操做系統可能使用不一樣的編碼做爲默認編碼。所以,從一個操做系統流入另外一個操做系統的數據可能不會被正確轉換。若要確保編碼後的字節可以正確解碼,應用程序應當使用帶前導碼的 Unicode 編碼(即 UTF8Encoding、UnicodeEncoding 或 UTF32Encoding)。另外一選擇是使用較高級別的協議以確保使用同一格式進行編碼和解碼。utf-8 |
由 Default 定義的系統 ANSI 代碼頁包含 ASCII 字符集,可是其編碼不一樣於 ASCII 的編碼。因爲全部的 Default 編碼會丟失數據,所以應用程序能夠改用 UTF8 或 Encoding。在 U+00 到 U+7F 的範圍內,UTF-8 一般是相同的,可是能夠在不丟失數據的狀況下對其餘字符進行編碼。ci
這時候就要使用Encoding.的GetEncoding 方法 (String),此方法
返回與指定代碼頁名稱關聯的編碼;
例如 string str = Encoding.GetEncoding("Korean").GetString(Data);
這樣解決了,代碼頁編碼不相同的問題。