1. 最近在作一個Socket通信的例子,可是若是使用UTF-8編碼傳輸中文的話取和的會不同。早上作了測試 。程序員
string str = "a我。.";看代碼中間是一個英文,一箇中文一箇中文的句號和一個通常的句號,按照全角佔兩字節,中文佔兩字節,算出來該是6個字節才行:測試
在下面的測試中:編碼
string str = "a我。."; Console.WriteLine(Encoding.Default.GetByteCount(str)); //6 Console.WriteLine(Encoding.ASCII.GetByteCount(str)); //4 Console.WriteLine(Encoding.UTF32.GetByteCount(str)); 16 Console.WriteLine(Encoding.UTF8.GetByteCount(str)); 8
因此在通迅中要取得長度該用 Encoding.Default.GetByteCount(str);spa
2.接下來引出正題,在上面的測試後,我接下來想顯示各個Byte,在我之前的寫法中,我習慣 Encoding.Default.GetByteCount(str).ToList().Foreach();以前也測試過這樣效果不是很好,比通常的Foreach慢,而後就本身寫了個擴展方法,擴展方法很簡單,直接針對IEnumable<T>擴展就好了,但是寫完事後以爲很奇怪,foreach是很是簡單的了,爲何微軟的foreach必需要是list才行呢,直到如今也沒有答案,我只是以爲是否是微軟的程序員裏面也有腦殼發熱的,晚上無聊就反編譯看了下源碼,裏面東西很少,可是以爲很奇怪,作個標記,之後再研究了。blog