amp@java

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            99 隨筆 :: 0 文章 :: 228 評論 :: 0 Trackbacks
          很遺憾,剛才寫了很多,一按“代碼”按鈕,沒有彈出對話框,但整個瀏覽器已經(jīng)不能動,再按一下Alt+F4,整個瀏覽器關(guān)閉,什么都沒有了,哭……我用的是TheWorld1.33+IE7。

          剛才的大意是:
          利用socket發(fā)送字符串時,為了區(qū)分字符串的起始、結(jié)束與中間各個部分的間隔,需要一些特殊字符作為分隔符,但普通可打印字符有可能出現(xiàn)在要發(fā)送的字符串中,不能作為分隔符,所以只能使用不可打印字符。Java使用的是Unicode編碼,可通過\uxxxx來表示編碼為xxxx的字符。例如:\u0129,\u0130,\u0131都是不可打印字符。但是,通過socket發(fā)送和接收字符串時,需要指定編碼,否則會使用操作系統(tǒng)的默認(rèn)編碼。在發(fā)送端,通過OutputStream的write()函數(shù)寫出要發(fā)送的字符串的Bytes,這些bytes要通過String.getBytes(編碼名稱)來獲得,例如編碼名稱為: UTF-16BE,則:

          1?socket.getOutputStream.write(str.getBytes("UTF-16BE"));

          讀socket的時候,通過InputStreamReader的read()函數(shù)來一個個字符地讀取,這時候如果不指定編碼,使用的也是操作系統(tǒng)的默認(rèn)編碼,例如中文的GB18030,這時候有些Unicode字符沒有對應(yīng)的GB18030編碼,讀出來的就都是?號。所以必須在InputStreamReader的構(gòu)造函數(shù)中指定字符編碼,例如:

          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
          主站蜘蛛池模板: 博罗县| 大足县| 崇礼县| 肇庆市| 定日县| 安溪县| 临桂县| 卢龙县| 招远市| 黄平县| 通渭县| 永康市| 闽侯县| 余干县| 望江县| 桦南县| 旌德县| 河东区| 达日县| 略阳县| 江永县| 灵山县| 漳州市| 屏东市| 岑巩县| 临沂市| 任丘市| 儋州市| 保德县| 宝兴县| 东乡| 武宁县| 轮台县| 南城县| 左云县| 浦江县| 安吉县| 沂南县| 漳浦县| 铁岭县| 平湖市|