当前位置: 技术问答>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