`
onlysomeone
  • 浏览: 145985 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

C++ 网络通信 中文乱码

阅读更多
从c++客户端发信给c#服务器端可能出现中文乱码

  在VS2008环境下(ANSI),中文是两个字节,西欧字符是一个字节

  比如:你好tpzy,其实总共用了2*2 + 4*1个字节,如果原样发送出去,C#在解码的时候会出现问题

  如下是一个解决办法:(思路,将ANSI字符串转换成UNICODE字符串,然后在服务器端用UNICODE对字符串进行解码)

  代码如下:

  //编码函数,此处UNICODE字符串仍以char*呈现(强制转换)。

  //原因是send函数的缓冲区必须是char*型的

  char* DataSendRecvHandle::UnicodeEncoding(const char* src)

  {

  DWORD num= MultiByteToWideChar(CP_ACP,0,src,-1,NULL,0);

  WCHAR *wRetStr;

  wRetStr= (WCHAR*)malloc(num*sizeof(WCHAR));

  if(wRetStr == NULL)

  {

  return 0;

  }

  memset(wRetStr, 0, num*sizeof(WCHAR));

  MultiByteToWideChar(CP_ACP,0, src, -1, wRetStr, num);

  return (char*)wRetStr;

  }

  //下面是send函数的部分代码:

  //dataSend为一数据缓冲区,(注意:UNICODE每个字符占两个字节)

  char* dataSendFinal = UnicodeEncoding(dataSend);

  int dataLen = wcslen((WCHAR*)dataSendFinal);

  int nRecv = ::send(s, dataSendFinal, dataLen * 2 , 0);

  //呵呵,用到了强制类型转换,(我们用C++就是为了体验其对内存操作的方便)只要明白它们在内存是怎么回事情,是完全可以这样干的。

  如此,c#服务器端则可以这样解码:

  //得到一个用于读写网络数据的流

  //client:一个TCPClient

  NetworkStream stream = client.GetStream();

  //读取流中的网络数据

  byte[] bytes = new byte[256];

  Int32 readLen = stream.Read(bytes, 0, 256);

  String str = System.Text.Encoding.Unicode.GetString(bytes);

  //

原文出自【比特网】,转载请保留原文链接:http://soft.chinabyte.com/database/97/12073597.shtml
分享到:
评论

相关推荐

    jsoncpp 写入乱码解决版本

    JSON数据通常以UTF-8编码存储,因为它能表示Unicode字符集中的所有字符,是网络通信的标准编码。然而,如果你的程序在处理JSON数据时,没有正确地指定或转换编码,就可能导致乱码的出现。 解决JSONCPP写入乱码问题...

    Java c++ socket通信

    在网络通信中,需要注意处理异常情况,如连接失败、数据传输错误等。此外,确保正确关闭Socket连接以释放系统资源。在Java中,使用`socket.close()`,在C++中,使用`close()`函数。 为了实现跨语言的Socket通信,...

    Visual C/C++编程精选集锦 网络与通信分册

    综上所述,这本“Visual C/C++编程精选集锦 网络与通信分册”是一本专注于利用Visual C/C++语言,在Windows操作系统环境下进行硬件编程和网络通信编程的参考资料。它可能包括对相关编程技术的讲解、实践案例、解决...

    c++实现的双向通信的socket小程序

    Socket是网络通信的一种接口,它允许不同计算机上的进程之间进行数据交换。在C++中,通常通过包含`<sys/socket.h>`和`<netinet/in.h>`等头文件来使用Socket API。 在本项目中,`server.cpp`是服务器端的实现,主要...

    c++简单通信

    在进行网络通信开发时,C++提供了多种方法和技术来实现不同场景下的需求。本篇将重点探讨如何利用C++进行简单的通信应用开发。 ### 核心知识点详解 #### 1. **TCP/IP协议** TCP/IP(传输控制协议/因特网互联协议...

    C/C++ API 帮助文档大全(中文,chm格式)

    这些API提供了大量的功能,包括数据结构、算法、输入/输出、网络通信、图形界面等。 1. **C++标准库**:这是C++的核心部分,包含了许多常用的数据结构(如vector、list、map)和算法(如排序、查找)。此外,...

    QT5 实现TCP通信 客户端与服务端,互相发送字符串;解决乱码问题

    QT5是一个跨平台的C++开发框架,广泛用于创建图形用户界面和...以上就是QT5实现TCP通信的基本步骤以及解决中文乱码问题的方法。实际开发中,还需要考虑异常处理、多线程、并发连接等问题,确保程序的稳定性和健壮性。

    C#客户端 C++服务端 乱码问题

    不同语言之间进行网络通信时,出现乱码是一种普遍的现象。  我在工作中也遇到了这样的问题——客户端是用C#来写的,服务端是用C++来写的,以下是解决乱码问题的方法:  socket 通信,客户端采用c#  发送报文...

    已经编译成静态库的jsoncpp1.8.4,同时解决中文乱码问题

    JSON是一种轻量级的数据交换格式,广泛应用于网络通信和数据存储。JSONCPP库提供了易于使用的API,使得开发者可以在C++项目中方便地处理JSON数据。 在给定的标题中,我们了解到这个JSONCPP版本是1.8.4,并且它已经...

    C++调用天气预报Webservice

    综上所述,这个项目涵盖了从C++基础到高级特性的广泛知识,包括UI设计、网络通信、Web服务调用以及数据解析等多个领域。开发者在实践中不仅能提升编程技能,还能对跨平台开发有更深入的理解。在实际操作中,应按照...

    C++builder Email 发送 接收源代码

    在C++Builder中实现电子邮件的发送和接收功能,涉及到网络编程、SMTP(简单邮件传输协议)和POP3(邮局协议)等核心概念。下面将详细介绍这些知识点。 首先,要实现邮件的发送,我们需要理解SMTP协议。SMTP是互联网...

    基于异步通信的聊天室c++.zip

    主线程负责用户界面的更新,而网络通信则在单独的线程中进行,确保用户界面的流畅性。线程同步机制,如互斥量(mutex)、信号量(semaphore)或事件对象,用于防止多个线程同时访问共享资源,保证数据的一致性。 5....

    java与c++传文件程序

    1. **Java Socket编程**:Java的Socket类提供了网络通信的基础,服务端通常使用ServerSocket类监听特定端口,等待客户端连接。当连接建立后,通过Socket对象进行数据的读写。在这个项目中,Java服务端开启一个Socket...

    《VC++网络通信编程实例案例精选》源代码

    每个压缩包子文件的名字虽然看起来是乱码,但它们很可能代表了不同的网络通信案例,如TCP连接、UDP广播、HTTP请求等。通过对这些源代码的学习和实践,读者可以逐步掌握网络通信编程的技巧,并能灵活运用到实际项目中...

    C++ Json编码/解析

    C++中的JSON编码和解析是软件开发中常见的一项任务,特别是在网络通信和数据存储中。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其简洁和易于阅读的特性而广泛使用。在C++中,`jsoncpp`库是...

    c++,c#互通DES加密算法(支持中文)

    在IT行业中,跨语言通信是常见的需求,尤其是在涉及到数据安全时。本文将深入探讨如何在C++和C#之间实现DES(Data Encryption Standard)加密算法的互通,特别强调其对中文字符的支持。 DES是一种广泛使用的对称...

    在vs2010下使用C++调用webserver接口

    在开发过程中,有时我们需要在本地应用(如C++程序)中...总的来说,C++调用Web服务器接口是一个涉及网络通信、编码处理和错误管理的过程。理解这些基本概念和操作,有助于你在VS2010中构建稳定、高效的C++客户端应用。

    libcurl 以JSON模式post

    在现代的网络编程中,数据交换往往离不开JSON(JavaScript Object Notation)格式,其简洁明了的特性使得它成为API接口间通信的首选。而在C++环境中,libcurl库则为HTTP请求提供了强大的支持。本篇文章将深入探讨...

    C++、C#写的WebService相互调用

    3. 中文字符乱码:在XML中处理非ASCII字符时,如果没有正确设置编码,可能会出现乱码。 五、WebService基础知识: - UDDI(统一描述、发现和集成):服务发现机制。 - WSDL(Web服务描述语言):描述服务的接口、...

    老飞飞源码-c++源码v15

    总的来说,【老飞飞源码-c++源码v15】是一个全面展示C++在游戏开发中的应用的实例,包含了游戏逻辑、网络通信、数据库操作等多个重要模块,对于学习和研究C++游戏开发或者对游戏后端技术感兴趣的人来说,这是一个...

Global site tag (gtag.js) - Google Analytics