在用 SmartIRC4Net 寫 irc 程式的時候發現,如果把 encoding 設成 System.Text.Encoding.UTF8 會導致無法連上 irc server。
很好奇的看了 SmartIRC4Net 的 code 結果沒什麼收穫,用的是一般的 StreamWriter 的初始化方法;如果改用 System.Text.UTF8Encoding 就可以正確連上了,而且這是 StreamWriter 預設的 encoding。
到底 Encoding.UTF8 和 UTF8Encoding 兩個有什麼不一樣呢?看了一下 mono 的實做方法,使用上這兩個都是 用 UTF8Encoding 的 instance,只是 Encoding.UTF8 是有 BOM 的,UTF8Encoding 則預設沒有。
就是因為那個多出來的 BOM 導致 irc server 無法認出正確的指令(因為不是 vaild ascii code),在一般使用上也要注意這兩者的差別。