问题描述
现在遇到这样一个问题:前端页面发送请求给后台(C程序),后台再通过tcp通信传给java进行业务处理,java业务处理后需要响应信息给前台(执行顺序是一样的:java将响应信息通过tcp传给C,C再将信息给前台),其中响应信息中有中文,导致前台显示乱码(中文都是?????????).在通讯的时候是通过outputStream.write(byte[])方式发送数据的,在这之前有对发送的String进行utf-8转码,但是好像没有用!求指教!!!!!!!!!!!!
解决方案
解决方案二:
你前端项目的编码是什么,你最好确认下,你从哪步开始就已经是乱码了。调试输出下,找找
解决方案三:
引用1楼u011201384的回复:
你前端项目的编码是什么,你最好确认下,你从哪步开始就已经是乱码了。调试输出下,找找
前端是utf-8的编码
解决方案四:
通讯的时候,先转成utf8的bytes,再发送,接受方先读取bytes,然后再转成utf8编码的字符串...只有可能是发送和接收的时候的编码问题,多检查一下吧..
解决方案五:
引用3楼luxiaoleics的回复:
通讯的时候,先转成utf8的bytes,再发送,接受方先读取bytes,然后再转成utf8编码的字符串...只有可能是发送和接收的时候的编码问题,多检查一下吧..
你是说接收方也要转成相应的字符编码吗?我问了公司里写C的同事,他说他不用转,他只负责数据传递!
解决方案六:
引用4楼tengcong5210的回复:
Quote: 引用3楼luxiaoleics的回复:
通讯的时候,先转成utf8的bytes,再发送,接受方先读取bytes,然后再转成utf8编码的字符串...只有可能是发送和接收的时候的编码问题,多检查一下吧..你是说接收方也要转成相应的字符编码吗?我问了公司里写C的同事,他说他不用转,他只负责数据传递!
我参与开发的上一个手游,服务器用的是java,客户端用的是c++,我负责的是服务器开发...反正我和客户端发送和接收字符串的时候,bytes都是调用了utf8的格式的....还有一个要注意的是..java和c还有c++的高地位不一样..比如一个int值,存在4个byte数组里..java的最高位是会放在数组的0的位置,,依次...但c和c++是反过来的..其他的我就想不到什么问题了....通讯这块的东西很少..所以要么是编码..要么是高低位的问题.别的就还真想不到了..我开发的过程中是只遇到了这两个...
解决方案七:
引用5楼luxiaoleics的回复:
Quote: 引用4楼tengcong5210的回复:
Quote: 引用3楼luxiaoleics的回复:
通讯的时候,先转成utf8的bytes,再发送,接受方先读取bytes,然后再转成utf8编码的字符串...只有可能是发送和接收的时候的编码问题,多检查一下吧..你是说接收方也要转成相应的字符编码吗?我问了公司里写C的同事,他说他不用转,他只负责数据传递!
我参与开发的上一个手游,服务器用的是java,客户端用的是c++,我负责的是服务器开发...反正我和客户端发送和接收字符串的时候,bytes都是调用了utf8的格式的....还有一个要注意的是..java和c还有c++的高地位不一样..比如一个int值,存在4个byte数组里..java的最高位是会放在数组的0的位置,,依次...但c和c++是反过来的..其他的我就想不到什么问题了....通讯这块的东西很少..所以要么是编码..要么是高低位的问题.别的就还真想不到了..我开发的过程中是只遇到了这两个...
我这边通讯java和C都是转成网络字节序(也就是高位),按你的意思是在outputStream.write(str.getBytes("utf-8"))的时候转码?我试过str=newString(str.getBytes(),"utf-8");这种方式不行。
解决方案八:
写的时候是write(str.getBytes("utf8"))没错..但是你读的时候..str=newString(str.getBytes(),"utf-8");这个里面的str.getBytes()的str是哪来的诶..应该是从缓冲区读出byte数组.直接生成字符串啊newString(bytes,"UTF-8")这才是你要的字符串吧..
解决方案九:
引用7楼luxiaoleics的回复:
写的时候是write(str.getBytes("utf8"))没错..但是你读的时候..str=newString(str.getBytes(),"utf-8");这个里面的str.getBytes()的str是哪来的诶..应该是从缓冲区读出byte数组.直接生成字符串啊newString(bytes,"UTF-8")这才是你要的字符串吧..
我的意思是我之前试过这种方式进行写入:1.str=newString(str.getBytes(),"utf-8");//先对要发送的字符串进行转码2.outputStream.write(str.getBytes());//然后再进行写入,但这种方式不可行,还是乱码。感觉上面这种方式和write(str.getBytes("utf8"))这种方式差不多呀!!!
解决方案十:
引用7楼luxiaoleics的回复:
写的时候是write(str.getBytes("utf8"))没错..但是你读的时候..str=newString(str.getBytes(),"utf-8");这个里面的str.getBytes()的str是哪来的诶..应该是从缓冲区读出byte数组.直接生成字符串啊newString(bytes,"UTF-8")这才是你要的字符串吧..
被粗呀,write(str.getBytes("utf8"))这种方式貌似也不可以,测试还是乱码!
解决方案十一:
引用9楼tengcong5210的回复:
Quote: 引用7楼luxiaoleics的回复:
写的时候是write(str.getBytes("utf8"))没错..但是你读的时候..str=newString(str.getBytes(),"utf-8");这个里面的str.getBytes()的str是哪来的诶..应该是从缓冲区读出byte数组.直接生成字符串啊newString(bytes,"UTF-8")这才是你要的字符串吧..被粗呀,write(str.getBytes("utf8"))这种方式貌似也不可以,测试还是乱码!
写的话,我们这也是这么写的..读你是怎么读的呢.
解决方案十二:
引用10楼luxiaoleics的回复:
Quote: 引用9楼tengcong5210的回复:
Quote: 引用7楼luxiaoleics的回复:
写的时候是write(str.getBytes("utf8"))没错..但是你读的时候..str=newString(str.getBytes(),"utf-8");这个里面的str.getBytes()的str是哪来的诶..应该是从缓冲区读出byte数组.直接生成字符串啊newString(bytes,"UTF-8")这才是你要的字符串吧..被粗呀,write(str.getBytes("utf8"))这种方式貌似也不可以,测试还是乱码!
写的话,我们这也是这么写的..读你是怎么读的呢.
读是C那边进行读的,之前问写C的同事,他说他那边不用转码。。。。
解决方案十三:
编码格式的问题,系统上的编码可能和程序中的不统一,导致转换成乱码
解决方案十四:
引用11楼tengcong5210的回复:
Quote: 引用10楼luxiaoleics的回复:
Quote: 引用9楼tengcong5210的回复:
Quote: 引用7楼luxiaoleics的回复:
写的时候是write(str.getBytes("utf8"))没错..但是你读的时候..str=newString(str.getBytes(),"utf-8");这个里面的str.getBytes()的str是哪来的诶..应该是从缓冲区读出byte数组.直接生成字符串啊newString(bytes,"UTF-8")这才是你要的字符串吧..被粗呀,write(str.getBytes("utf8"))这种方式貌似也不可以,测试还是乱码!
写的话,我们这也是这么写的..读你是怎么读的呢.
读是C那边进行读的,之前问写C的同事,他说他那边不用转码。。。。
总之,肯定是编码问题...他连试一下,排除一下错误的可能情况都不愿意啊........别的我就想不到问题所在了...你们翻翻基础的书,看看编码的东西吧...