当前位置: 代码迷 >> Java Web开发 >> java里的字符编码,该如何解决
  详细解决方案

java里的字符编码,该如何解决

热度:115   发布时间:2016-04-16 21:44:46.0
java里的字符编码
从网页输入字符串,通过套接字与服务器连接,服务器接收字符串服务器程序是用C写的,服务器与串口调试工具通信。如果输入英文字符的话,就能正确接收,比如网页上输入“abc”,串口调试助手就能接收“abc”,但是如果输入汉字字符,比如“中国”,串口调试助手就只收到“中”,这跟字符编码有关系吗,在网上查了一下,试了一些办法,还是不行,求分析指导。顺带把代码附上,用注释掉的也不行。
//                int countStr = CMD2Send.length();
            try{    byte[] buff=CMD2Send.getBytes("GB2312");
                int countStr=buff.length;
                 for (i = 0; (i < 10) && (256 * i + 256 < countStr); i++){
                    CMD = CMD2Send.substring(256 * i, 256 * i + 256);
                    dataX[0].add(CMD);
                 }
                  CMD = CMD2Send.substring(256 * i);
                  dataX[0].add(CMD);
------解决思路----------------------
Quote: 引用:

在你传输数据之前先把这些数据写入流中,试试双向字节流方式传输

------解决思路----------------------
有完整的代码吗?
至少得有data和dataLength的定义和赋值语句。

下面是我写的例子,输出是4。

package topics_390899774;

import java.io.UnsupportedEncodingException;

public class LengthTest {

    public static void main(String[] args) throws UnsupportedEncodingException {
        String data = "中国";
        short dataLength = (short) data.getBytes("GB18030").length;
        
        System.out.println(dataLength);
    }

}


输出
4


另外建议:
可以考虑只传递数据过去,尾部初始化为0
这样接受方不用知道length也能正常处理了

------解决思路----------------------
”网页告诉服务器 长度是2“ 这句话有问题,肯定是什么地方搞错了。HTTP 通信不会弄错这个事情的,因为它们只知道 byte 不知道 char 或 String 是什么东西。



引用:
Quote: 引用:

>> 比如“中国”,串口调试助手就只收到“中”,这跟字符编码有关系吗

推测:是不是遇到\0就把后面的东西忽略掉了
不是,现在是这样的,我的服务器程序可以把网页上发送过来的数据全部接收,比如发送“中国”,用wireshark查看,确实发送了4个字节,但是网页同时还会告诉服务器它发送了几个字节,而服务器会根据这个向串口发送相应的字节数。网页发送了“中国”,却告诉服务器只发送了2个字节,所以服务器虽然收到了全部数据,却只会把前两个字节(也就是“中”字)发送给串口。现在要解决的就是网页如何告诉服务器正确的字节数,我尝试用dataLength = (short)data.getBytes("GB18030").length;也不行,不知道该怎么办了。
  相关解决方案