`
onlysomeone
  • 浏览: 144071 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

    《Android应用开发揭秘》源码

     8.4 网络通信的中文乱码问题  8.5 WebKit应用  8.5.1 WebKjt概述  8.5.2 WebView浏览网页  8.5.3 WebView与Javascript  8.6 WtFi介绍  8.7 蓝牙  8.8 小结  第9章 Android特色开发  9.1 传感器  9.2 ...

    《Android应用开发揭秘》附带光盘代码.

     8.4 网络通信的中文乱码问题  8.5 WebKit应用  8.5.1 WebKjt概述  8.5.2 WebView浏览网页  8.5.3 WebView与Javascript  8.6 WtFi介绍  8.7 蓝牙  8.8 小结  第9章 Android特色开发  9.1 传感器  9.2 ...

    vc源代码合集0951.rar

    2012-06-12 11:50 3,620,678 visual c++网络通信编程实用案例精选(源代码).rar 2012-06-12 12:23 3,982,016 Visual_C++网络编程经典案例详解PPT.rar 2012-06-12 12:26 428,875 Visual_Studio_2008_入门教程.pdf 2012...

    Android应用开发揭秘(pdf )

     如何解决Android网络通信中的乱码问题?  在Android中如何使用语音服务和Google Map Apl? Android如何访问摄象头、传感器等硬件的APl?  如何时行Widget开发?如何用各种Android组件来打造漂亮的UI界面?  ...

    《Android应用开发揭秘》源码.rar

     ·如何解决android网络通信中的乱码问题?  ·在android中如何使用语音服务和 google map api?android如何访问摄像头、传感器等硬件的api?  ·如何进行widget开发?如何用各种android组件来打造漂亮的ui界面?...

    Android应用开发揭秘pdf高清版

    8.4 网络通信的中文乱码问题 8.5 WebKit应用 8.5.1 WebKjt概述 8.5.2 WebView浏览网页 8.5.3 WebView与Java 8.6 WtFi介绍 8.7 蓝牙 8.8 小结 第9章 Android特色开发 9.1 传感器 9.2 语音识别 9.3 GoogleMap 9.3.1 ...

    XML轻松学习手册--XML肯定是未来的发展趋势,不论是网页设计师还是网络程序员,都应该及时学习和了解

    XML越来越热,关于XML的基础教程网络上也随处可见。可是一大堆的概念和术语往往让人望而生畏,很多朋友问我:XML到底有什么用,我们是否需要学习它?我想就我个人学习过程的心得和经验,写一篇比较全面的介绍文章。...

    asp.net知识库

    C++ 泛型编程系列讲座之实施 泛型技巧系列:简单类型选择器 C# 泛型简介 我眼中的C#2.0新功能特性 泛型技巧系列:避免基类及接口约束 New Article 不该用Generics实现Abstract Factory的理由 C#2.0-泛型 C#2.0-...

Global site tag (gtag.js) - Google Analytics