安卓使用Socket发送中文,C语言服务端接收乱码问题解决方案

今天用安卓通过Socket发送数据到电脑上使用C语言写的服务端,发送英文没有问题,可当把数据改变成中文时,服务端接收到的数据确是乱码。

突然想到,VS的预处理使用的是ANSI编码,而安卓网络数据都是UTF8格式的,这样直接使用printf打印出出来的当然是乱码,所以解决方法就是把UFT8格式的数据转换成ANSI!

避免大家遇到类似问题,少走弯路,我现在把自己找的转码函数贴出来!

C语言文字编码转换函数:

//UTF8转成Unicode
wchar_t * UTF8ToUnicode( const char* str )
{
	int    textlen = 0;
	wchar_t * result;
	textlen = MultiByteToWideChar( CP_UTF8, 0, str,-1,    NULL,0 );
	result = (wchar_t *)malloc((textlen+1)*sizeof(wchar_t));
	memset(result,0,(textlen+1)*sizeof(wchar_t));
	MultiByteToWideChar(CP_UTF8, 0,str,-1,(LPWSTR)result,textlen );
	return    result;
}

//Unicode转成ANSI
char * UnicodeToANSI( const wchar_t *str )
{
	char * result;
	int textlen = 0;
	// wide char to multi char
	textlen = WideCharToMultiByte( CP_ACP,    0,    str,    -1,    NULL, 0, NULL, NULL );
	result =(char *)malloc((textlen+1)*sizeof(char));
	memset( result, 0, sizeof(char) * ( textlen + 1 ) );
	WideCharToMultiByte( CP_ACP, 0, str, -1, result, textlen, NULL, NULL );
	return result;
}

这样大家在接收到数据的时候,直接转换成目标编码就可以了

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-25 16:06:00

安卓使用Socket发送中文,C语言服务端接收乱码问题解决方案的相关文章

客户端发送中文消息到服务端Mysql数据库乱码的问题

这些天的实训写了一个班级发布消息到云端的小android应用,其中注册用户信息的时候需要将中文消息上传到云端的mysql数据库中,如果直接传中文字符串过去在数据库中会出现?的乱码,在加了如下代码之后问题得到了解决 其中tag是要传递的字符串:

JAVA SOCKET网络编程,服务端接收多个客户端连接的实现

这是基于前面一篇文章的一个简单扩展,当然这不是最好的实现 服务端如果要想接收多个客户端连接,必须死循环去接收新的客户端的连接请求,一个完整的客户端服务端socket连接通过一个线程来维护 package com.tree.demo.socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.n

一个关于UDP socket服务端接收长度不正确的问题

最近项目需要实现一个通过UDP协议和远端服务平台通讯的需求,简要描述如下: 本端为嵌入式linux路由器(udp客户端,linux C编码),远端为租用的阿里云服务器(udp服务端,java编码), 通信协议为UDP,本端会定时向远端服务器发送消息. 在实现和调试过程中发现一个问题: 1)将远端服务程序放在实验室pc机上调试没有问题,即"路由器-PC"交互正常. 2)将远端服务程序放至阿里云服务器上运行,结果服务端收到的udp消息会多出4个字节,偶尔还会多出6个,多出的字节是 EF B

关于servlet服务端接收客户端发送的List<?>数据的问题

这些天由于任务需要,又研究了一下servlet,因为以前学习过客户端和服务器通过JSON串传输数据,知道可以在servlet中查询数据库,再将数据组装成JSON串发送给客户端,让客户端解析数据.但是这次由于涉及到客户端上传数据,经过servlet处理,然后存入数据库中.这样就不知道怎么处理了. 在实践过程发现,如果在客户端将数据组装成JSON串,在发送给servlet接收,用不了JSON的jar包(目测是需要导包的,因为servlet是在一个java工程中写的,JSON for java的包蛮难

Linux c服务端接收图片c/c++语言module

---恢复内容开始--- 由于深度学习任务的需要,要在程序里面嵌入一个module. 这个module 的功能是接收来自ios客户端的图片.并且传送给深度学习分类器进行处理. 于是看了看各种各样的 module 实现方案. 1 先是用IO函数把图片以数组的方式存起来. 再和服务器建立连接,socket传这个数组. 然后服务器接收完数组以后就再运用IO函数 把数组以图片的方式存起来! 还有代码 bool ReadFileToBuffer( CString strFile,string& strBu

解决Django发送中文邮件时的编码及乱码问题

参考自---http://blog.csdn.net/clh604/article/details/9274793 #-*- coding=utf8 -*- from email.message import Message from email.header import Header import smtplib msg=Message() msg['Mime-Version']='1.0' msg['Content-type']='text/html' msg['From']="flow*

WebService或HTTP服务端接收请求转发消息到另一个服务端-实现思路

1.需求结构(WebService) A客户端<->B服务端<->C服务端 说明: a.在B服务端上面添加配置项(1.是否转发消息到C服务端:2.C服务端IP和端口): b.A客户端发消息到B服务端,B服务端收到消息判断是否需要转发,如果是需要转发就将消息转发给C服务端,然后消息再依次返回. 2.现在就是B服务端如何接受A客户端消息并直接转发给C服务端? 目前我找到就一下方案: a.apache camel:基于规则路由和中介引擎,貌似很强大时间紧,木有时间研究.... b.土办法

解决.NET Web API生成的Help无Controller说明&amp;服务端接收不到请求

今天在用.NET Web API写一个接口的时候遇到一个问题.在Controller中新加了一个方法,客户端就不能请求接口了,当时建WEB API项目是用的VS默认设置,在服务端打断点一直没有进去,而APP端一直报服务端响应失败!奇怪的是连生成的Help API说明都没Controller说明. 这样也办法用WebAPITestClient测试,后来用想到了用HttpRequester插件请求一下接口果然出错了. <Error><Message>出现错误.</Message&

服务端接收不到ajax post请求的参数

问题描述 服务端使用request.getParameter()接收不到post请求的参数,导致业务逻辑抛出空指针异常. 解决途径 tomcat对post请求支持的字节数不受限制的配置发生变化.在tomcat容器在7.0.63版本之前,maxPostSize <= 0 都表示 tomcat对post请求支持的字节数不受限制,从7.0.63版本开始,仅是maxPostSize < 0 表示tomcat对post请求支持的字节数不受限制.将maxPostSize的值由0改为-1,问题得到解决.(m