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 閱讀(1592) 評論(0)  編輯  收藏 所屬分類: Java common
          主站蜘蛛池模板: 安龙县| 靖宇县| 伊通| 文化| 卢氏县| 大邑县| 永德县| 扎赉特旗| 津南区| 涞水县| 房产| 浦北县| 醴陵市| 江阴市| 巴彦淖尔市| 华安县| 朝阳区| 万州区| 宝丰县| 格尔木市| 肥城市| 桦甸市| 水富县| 屯留县| 普宁市| 玉门市| 安义县| 翁源县| 夹江县| 山西省| 襄垣县| 天镇县| 赤峰市| 霍州市| 贵南县| 万州区| 莱西市| 白山市| 承德市| 昭通市| 湘潭市|