amp@java

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            99 隨筆 :: 0 文章 :: 228 評論 :: 0 Trackbacks
          很遺憾,剛才寫了很多,一按“代碼”按鈕,沒有彈出對話框,但整個瀏覽器已經不能動,再按一下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();
          posted on 2006-11-02 10:39 amp@java 閱讀(1597) 評論(0)  編輯  收藏 所屬分類: Java common
          主站蜘蛛池模板: 蓬莱市| 来安县| 那坡县| 石家庄市| 萨嘎县| 泽普县| 庆阳市| 越西县| 云霄县| 临桂县| 三原县| 昌宁县| 榆社县| 阳高县| 成武县| 龙山县| 郓城县| 肥东县| 仙居县| 响水县| 迁安市| 麻阳| 富宁县| 西华县| 淄博市| 仙桃市| 宿州市| 拜城县| 额尔古纳市| 视频| 涪陵区| 卓资县| 香港 | 嵊州市| 汉川市| 敖汉旗| 永顺县| 紫阳县| 安平县| 招远市| 广元市|