-------------100分,非要解决字符串编码的问题。--------------------
如下,我用NIO来处理Socket连接,下面是接受数据的代码。可是如果接受英文没有问题,如果是中文的话,就出现乱码。
/**
* 接收消息
* @param sc SocketChannel
* @return boolean
*/
private synchronized boolean acceptInfo(SocketChannel sc) {
StringBuffer sb = new StringBuffer();
ByteBuffer buffer = ByteBuffer.allocate(1024);
try {
while (sc.read(buffer) > 0) {
while (buffer.hasRemaining()) {
.....................................................
}
}
}
catch (IOException ie) {
}
}
问题点数:100、回复次数:7Top
1 楼jingweicool(蓝色风暴)回复于 2006-06-01 16:10:58 得分 0
dingTop
2 楼iwlk(http://www.ChinaFedora.cn/ fedora论坛)回复于 2006-06-01 16:12:06 得分 0
http://community.csdn.net/Expert/topic/4794/4794120.xml?temp=.5041773Top
3 楼strawren(大漠)回复于 2006-06-01 16:14:56 得分 0
给个提示给你吧,你就知道问题出在什么地方了
byte[] data;
sc.read(data );
String returnString = new String(data, "UTF-8");
System.out.println(returnString );Top
4 楼javaname80(javaname60)回复于 2006-06-01 16:33:28 得分 0
唉!没有人做过这样的吗?Top
5 楼sswater(光杆兵)回复于 2006-06-01 16:59:28 得分 0
搂主的问题其实很简单,概念问题:
http://www.regexlab.com/zh/encoding.htm
Top
6 楼treeroot(旗鲁特)回复于 2006-06-01 17:08:16 得分 0
upTop
7 楼OnlyFor_love(『勾勾手指头 一辈子不分手』)回复于 2006-06-02 14:40:21 得分 0
参考如下代码
public String receiveMessage() throws Exception {
byte[] buf = new byte[BUFSIZE];
int i = 0;
int n = 0;
while ((n = in.read()) < 0) {
//没有读进数据
//throw new IOException("epp element incomplete");
}
if (i == buf.length) {
//移动数据
byte[] newBuf = new byte[buf.length + BUFSIZE];
for (int j = 0; j < buf.length; j++) {
newBuf[j] = buf[j];
}
buf = newBuf;
}
//写入数据
buf[i++] = (byte) n;
return new String(buf, "UTF-8").trim();
}
Top




