C 與C 網路傳輸中的編碼轉換

2021-07-04 21:29:15 字數 1311 閱讀 1631

近期的專案因為客戶端用的是unity3d(使用c#),服務端用的是c++(vs2013,windows)。所以當他們相互傳輸中文字串的時候不能正常工作。經過一番研究,把最終的解決方案分享出來。

本方案的思路就是保證服務端和客戶端間的通訊使用utf8編碼。所以他們在給對方發中文資料時候都要轉成utf8格式。

服務端處理

因為vs2013中c++的中文字串(比如string str="測試")是gbk編碼。所以服務端要把gbk轉換成utf8格式,方法如下:

服務端**示例一:

#include 

int main()

上述**通過乙個gbk2utf8函式(**在文章末尾)把gbk編碼的字串轉換成utf8編碼,然後再發給客戶端。

服務端**示例二

#include 

#pragma execution_character_set("utf-8") //設定字串的格式為utf-8

int main()

本方法使用了#pragma execution_character_set("utf-8")編譯選項後,上述**中的「測試」字串就是utf8格式。(注:vs2010以上版本才支援)

客戶端處理

客戶端**示例

using system.text;

//.....

//此處收到服務端的字串資料inputbufs

string inputstr = encoding.utf8.getstring(inputbufs); // 用utf8格式讀取服務端發過來的資料

// todo, 處理資料

//......

// 傳送中文資料到服務端

string outputstr = "測試";

byte outputbufs = encoding.utf8.getbytes(outputstr); // 把「測試」字串編碼為utf8格式

string gbk2utf8(const

string& strgbk)

string utf82gbk(const

string& strutf8)

總結:在不同平台之間傳輸中文資料的時候,一定要明確知道平台之間編碼的差異(如vs2013的c++預設編碼為gbk,而c#為unicode),然後轉成統一的編碼進行網路傳輸(推薦utf8)。

C 中的編碼轉換

好長時間沒有寫編碼轉換.今天寫了下特地放上來供大家以後用到就不用去找了.將乙個字串轉換成unicode型別的base64編碼的字串如下 convert.tobase64string encoding.unicode.getbytes unicodestring 紅色標明的是還可以轉換bigendia...

C 編碼轉換

最近在c 專案中經常會遇到編碼轉換問題,例如ascii碼,utf 8,多位元組等等,特此總結下來並附上 也方便大家學習和使用。include enum u78 typedef unsigned short utf16 16 bits typedef unsigned char utf8 8 bits...

C 文字編碼轉換

1.c 的編碼轉換預設由system.text.encoding進行操控轉換.引用為 using system.text 2.c encoding類自帶編碼有 utf7 utf8 utf32 unicode ascii,encoding類有乙個子類就是default,此類會隨操作環境變化而變化,在w...