linux 文件 utf8 c语言,linux下如何测试socket server端可以接受utf-8编码的数据?(用c语言开)发...
发布日期:2021-06-24 13:06:26 浏览次数:2 分类:技术文章

本文共 1160 字,大约阅读时间需要 3 分钟。

各位达人,小弟有个问题请教各位,先谢了。

情况描述:

目的:写一个一个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=zh_CN.utf8

|

那这样的话,编码格式应该取决于你源程序的编码格式吧

用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。每个字占三个字节。

|

我也不是很懂

你现在“不再调用GB2312ToUTF8就发送是不行的”,直接发送不是utf8编码格式?

转载地址:https://blog.csdn.net/weixin_32946543/article/details/116597826 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:linux根目录没有卷组,linux – 卷组消失了,LV仍然可用
下一篇:查看oracle是32位还是64位,怎么看dll是32位还是64位_查看dll是64位还是32位的方法...

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月10日 11时56分27秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章