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 阅读(1368) 评论(0)  编辑  收藏 所属分类: Java common

只有注册用户登录后才能发表评论。


网站导航: