java Client端和C Server端通信中文乱码问题

问题描述

现在遇到这样一个问题:前端页面发送请求给后台(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的同事,他说他那边不用转码。。。。

总之,肯定是编码问题...他连试一下,排除一下错误的可能情况都不愿意啊........别的我就想不到问题所在了...你们翻翻基础的书,看看编码的东西吧...

时间: 2024-09-29 01:24:24

java Client端和C Server端通信中文乱码问题的相关文章

qt-QT编程client端怎么和server端在不同电脑上连接

问题描述 QT编程client端怎么和server端在不同电脑上连接 写了一个简单的QT程序进行client端与server端的连接,运行在同一台电脑上client端输入localhost可以连接,但是运行在不同电脑上client端输入服务器IP无法连接,求大神指教 解决方案 查看具体错误信息,先看服务端的端口是否正确侦听.其次是否有防火墙等拦截 解决方案二: 应该是防火墙的问题,如果两个电脑都在局域网同一个网段并且各自网络没问题的话.

Windows和Linux端rsync推拉同步时中文乱码解决方法

主要原因是因为Windows和Linux端文件名编码不同导致的! rsync在3.0版本之后,提供了一个选项,可以进行文件编码的转换,格式如下:--iconv=<local>,<remote> local指本地编码,remote指远程机器编码,参考示例如下: 从Linux sersync推到Windows时: Linux端sersync confxml.xml配置<commonParams params="-avzP --iconv=GBK,UTF-8"/

Python和php之间通信中文乱码解决办法

即使在urlencode之前str.decode("cp936″).encode("utf-8″)做了编码转换也是没用的.后来查询手册查到一个urllib.quote()函数,用此方法成功解决! python端:  代码如下 复制代码 str = "中文" str = urllib.quote(str.decode("cp936").encode("utf-8")) postData = {} postData['str']

java在linux系统下文件夹出现中文乱码的问题

  问题描述: linux的默认字符编码是utf-8,在linux上存的是中文名的文件,但是用java读出来就是乱码,全是??????然后我通过:new String(files[i].getName().getBytes("GB2312"),"UTF-8");这样处理一下,中文文件名全变成了?????,应该怎么转码才能获取中文? 问题答案: Java 中的字符编码默认是Unicode 用new String(files[i].getName().getBytes(

jni和C++通信中文乱码的问题

http://www.cnblogs.com/bluesky4485/archive/2011/12/13/2285802.html 首先,需要明确几个关于编码的基本概念: java内部是使用的16bit的unicode编码(utf-16)来表示字符串的,无论英文还是中文都是2字节: jni内部是使用utf-8编码来表示字符串的,utf-8是变长编码的unicode,一般ascii字符是1字节,中文是3字节: c/c++使用的是原始数据,ascii就是一个字节,中文一般是GB2312编码,用2个

jni和C++通信中文乱码问题的解决办法

首先,需要明确几个关于编码的基本概念: java内部是使用的16bit的unicode编码(utf-16)来表示字符串的,无论英文还是中文都是2字节: jni内部是使用utf-8编码来表示字符串的,utf-8是变长编码的unicode,一般ascii字符是1字节,中文是3字节: c/c++使用的是原始数据,ascii就是一个字节,中文一般是GB2312编码,用2个字节表示一个汉字. jni的中文字符串处理 先从字符流的方向分别对java-->C++和C++-->java进行分析 java--&

Java在Linux下插入DB数据库出现中文乱码

方法很简单,就是驵编码为utf-8 修改Eclipse软件中的编码:windows菜单->preference->general->content type,Javaclassfile和text都设成utf-8: 然后,在Linux下执行以下的命令: mysql> set names UTF8; 最后,在查询的时候,Linux下的内容,就不是乱码了.

Android App端与PHP Web端的简单数据交互实现示例

前言 由于学校科技立项的项目需要实现Android App端与PHP Web端的简单数据交互的实现,当前场景是Web端使用的是MySql数据库,Apache服务器和PHP语言编写的.数据交互的简单理解就是Android能向服务端进行数据获取,同时也能进行数据提交. 实现流程 流程说明 Andorid Server端对MySql数据库进行简单的查询操作,并将查询数据结果转换为Json格式提供给Andorid利用OKhttp读取再解析Json展示到APP上:同时Andorid端利用OKhttp提交给

java 网络传输 abel-java, client传值控制server端 JLabel上的text值, 可是值一直不变

问题描述 java, client传值控制server端 JLabel上的text值, 可是值一直不变 client端代码: public class KeyboardGUI{ public final String PASSWORD = "123"; public JFrame frame; public JTextField textField; public JLabel lblOnoff; public Socket socket; /** * Launch the appli