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

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

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧