当前位置: 技术问答>linux和unix
socket通信中的中文字符问题(菜鸟求助)
来源: 互联网 发布时间:2016-08-12
本文导语: 服务端程序运行在linux系统下,客户端程序运行在windows系统下,双方通信时,如果没有中文字符则数据收发、数据处理等等都正常,一出现中文字符就出错,该怎么处理?大家帮帮忙。 | linux...
服务端程序运行在linux系统下,客户端程序运行在windows系统下,双方通信时,如果没有中文字符则数据收发、数据处理等等都正常,一出现中文字符就出错,该怎么处理?大家帮帮忙。
|
linux 默认情况下的编码格式utf-8
与windows不同,在linux和windows之间通过socket发消息势必会遇到这个问题尤其是传递文件时的文件名和路径(linux:/home/...;windows:c:temp;当然windows也认/,所以这个文件还好解决一点)
编码:linux有iconv:你进一步封装成自己的函数
在向windows发送数据前最后一个操作就是将所有buff数据的编码转换成gb2312/gbk,
在从windows接收数据后第一个操作就是将所有buff数据的编码转换成utf-8
与windows不同,在linux和windows之间通过socket发消息势必会遇到这个问题尤其是传递文件时的文件名和路径(linux:/home/...;windows:c:temp;当然windows也认/,所以这个文件还好解决一点)
编码:linux有iconv:你进一步封装成自己的函数
在向windows发送数据前最后一个操作就是将所有buff数据的编码转换成gb2312/gbk,
在从windows接收数据后第一个操作就是将所有buff数据的编码转换成utf-8
|
这个帖子也在问这个问题
http://topic.csdn.net/u/20091201/19/1ce57579-fd89-4ba3-bfb5-61dc49ee6b88.html
http://topic.csdn.net/u/20091201/19/1ce57579-fd89-4ba3-bfb5-61dc49ee6b88.html
|
以前也遇到过这种情况,有此一问,我们不能假设所有的windows都是BG2312编码,也不能假设所有的Linux都是UTF-8,那么接收端如何判断传过来的数据的编码呢?
|
先要检测中文字符的编码格式——gb2312还是 gbk啊 什么的,然后用iconv 函数转 不过也可以改变 unix系统的 默认字符编码 为 gb2312 这样就不用转了
|
虽然我对开发这方面不是很熟
不知道你说的出错 是程序出错退出 还是乱码 最好把现象描述的更详细一点
如何可能 最好把核心代码贴出来 大家才好帮你分析
不知道你说的出错 是程序出错退出 还是乱码 最好把现象描述的更详细一点
如何可能 最好把核心代码贴出来 大家才好帮你分析
|
up
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。