近期的專案因為客戶端用的是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...