很遺憾,剛才寫了很多,一按“代碼”按鈕,沒有彈出對話框,但整個瀏覽器已經不能動,再按一下Alt+F4,整個瀏覽器關閉,什么都沒有了,哭……我用的是TheWorld1.33+IE7。
剛才的大意是:
利用socket發送字符串時,為了區分字符串的起始、結束與中間各個部分的間隔,需要一些特殊字符作為分隔符,但普通可打印字符有可能出現在要發送的字符串中,不能作為分隔符,所以只能使用不可打印字符。Java使用的是Unicode編碼,可通過\uxxxx來表示編碼為xxxx的字符。例如:\u0129,\u0130,\u0131都是不可打印字符。但是,通過socket發送和接收字符串時,需要指定編碼,否則會使用操作系統的默認編碼。在發送端,通過OutputStream的write()函數寫出要發送的字符串的Bytes,這些bytes要通過String.getBytes(編碼名稱)來獲得,例如編碼名稱為: UTF-16BE,則:
1?socket.getOutputStream.write(str.getBytes("UTF-16BE"));
讀socket的時候,通過InputStreamReader的read()函數來一個個字符地讀取,這時候如果不指定編碼,使用的也是操作系統的默認編碼,例如中文的GB18030,這時候有些Unicode字符沒有對應的GB18030編碼,讀出來的就都是?號。所以必須在InputStreamReader的構造函數中指定字符編碼,例如:
1?InputStreamReader?isr?=?new?InputStreamReader(socket.getInputStream(),"UTF-16BE");
2?char?c?=??(char)isr.read();