amp@java

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

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

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

          讀socket的時(shí)候,通過(guò)InputStreamReader的read()函數(shù)來(lái)一個(gè)個(gè)字符地讀取,這時(shí)候如果不指定編碼,使用的也是操作系統(tǒng)的默認(rèn)編碼,例如中文的GB18030,這時(shí)候有些Unicode字符沒(méi)有對(duì)應(yīng)的GB18030編碼,讀出來(lái)的就都是?號(hào)。所以必須在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 閱讀(1592) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): Java common
          主站蜘蛛池模板: 全椒县| 鹤峰县| 手游| 砚山县| 柘城县| 武义县| 巴里| 益阳市| 屏边| 灵台县| 深州市| 金寨县| 潞城市| 金华市| 营口市| 怀宁县| 托克逊县| 大同县| 凤翔县| 璧山县| 河池市| 灌南县| 灵丘县| 伊吾县| 新丰县| 克山县| 潼南县| 绥中县| 镇坪县| 孙吴县| 江北区| 综艺| 铜山县| 钟山县| 和田市| 当雄县| 石河子市| 科技| 汽车| 西乌珠穆沁旗| 越西县|