当前位置: 技术问答>linux和unix
linux下如何测试socket server端可以接受utf-8编码的数据?(用c语言开)发
来源: 互联网 发布时间:2016-10-16
本文导语: 各位达人,小弟有个问题请教各位,先谢了。 情况描述: 目的:写一个一个socket client端程序用于向socke server端发送信息(包括中英文),并接受回复和处理。 已完成: 1. 已完成英文的发送,并接受了s...
各位达人,小弟有个问题请教各位,先谢了。
情况描述:
目的:写一个一个socket client端程序用于向socke server端发送信息(包括中英文),并接受回复和处理。
已完成:
1. 已完成英文的发送,并接受了server端发回的200 OK数据。
(比如函数如下:sendMyMSG(char *sendBuf,long sendLength))
2. 可以对回复信息进行处理。
3. 根据server端回复确认server接收utf-8编码的数据。
问题:
1. 如何向server端发送中文。
2. 我先查了下资料,发现有别人写好的编码转换的函数如下面的GB2312ToUTF8函数。
3. 而linux的默认编码是可以改变为utf-8的.(比如修改/etc/sysconfig/i18n)
4. 是不是我就可以在我的测试程序中将要发到函数sendMyMSG去的字符串之前调用下面的GB2312ToUTF8(或者类似的函数?×××ToUTF8.)我测试结果,还是不行。
我也查不到好的办法,不像Java可以直接将要发送的数据直接编码为utf-8,而不管你现在为何种编码。
附:
int GB2312ToUTF8(char* srcStr, char* desBuff, size_t desBuffLength)
{
assert(strlen(srcStr)>0);
size_t iLen = strlen(srcStr);
iconv_t cd;
cd = iconv_open("utf-8","gb2312");
assert(cd != 0);
iconv(cd, &srcStr, &iLen, &desBuff, &desBuffLength);
iconv_close(cd);
return desBuffLength;
}
情况描述:
目的:写一个一个socket client端程序用于向socke server端发送信息(包括中英文),并接受回复和处理。
已完成:
1. 已完成英文的发送,并接受了server端发回的200 OK数据。
(比如函数如下:sendMyMSG(char *sendBuf,long sendLength))
2. 可以对回复信息进行处理。
3. 根据server端回复确认server接收utf-8编码的数据。
问题:
1. 如何向server端发送中文。
2. 我先查了下资料,发现有别人写好的编码转换的函数如下面的GB2312ToUTF8函数。
3. 而linux的默认编码是可以改变为utf-8的.(比如修改/etc/sysconfig/i18n)
4. 是不是我就可以在我的测试程序中将要发到函数sendMyMSG去的字符串之前调用下面的GB2312ToUTF8(或者类似的函数?×××ToUTF8.)我测试结果,还是不行。
我也查不到好的办法,不像Java可以直接将要发送的数据直接编码为utf-8,而不管你现在为何种编码。
附:
int GB2312ToUTF8(char* srcStr, char* desBuff, size_t desBuffLength)
{
assert(strlen(srcStr)>0);
size_t iLen = strlen(srcStr);
iconv_t cd;
cd = iconv_open("utf-8","gb2312");
assert(cd != 0);
iconv(cd, &srcStr, &iLen, &desBuff, &desBuffLength);
iconv_close(cd);
return desBuffLength;
}
|
GB2312ToUTF8 貌似要求当前的字符集为gb2312
看看你当前的环境变量LANG是如何设置的?
看看你当前的环境变量LANG是如何设置的?
|
你发送的数据是从哪儿来的,直接写在程序中的字符串吗?
试试LANG=zh_CN.utf8
试试LANG=zh_CN.utf8
|
那这样的话,编码格式应该取决于你源程序的编码格式吧
用file your.c 看看呢..
用file your.c 看看呢..
|
我的系统是CentOS 5.5
[s@localhost socket]$ echo $LANG
en_US.UTF-8
客户端给服务器发送汉字"测试",
ret = write(sockfd, "测试", sizeof("测试"));
服务器端收到的是utf8格式的:0xe6 0xb5 0x8b 0xe8 0xaf 0x95。每个字占三个字节。
[s@localhost socket]$ echo $LANG
en_US.UTF-8
客户端给服务器发送汉字"测试",
ret = write(sockfd, "测试", sizeof("测试"));
服务器端收到的是utf8格式的:0xe6 0xb5 0x8b 0xe8 0xaf 0x95。每个字占三个字节。
|
我也不是很懂
你现在“不再调用GB2312ToUTF8就发送是不行的”,直接发送不是utf8编码格式?
你现在“不再调用GB2312ToUTF8就发送是不行的”,直接发送不是utf8编码格式?