程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 使用多字節字符集的跨平台(PC、Android、IOS、WP)編碼/解碼方法,androidios

使用多字節字符集的跨平台(PC、Android、IOS、WP)編碼/解碼方法,androidios

編輯:C++入門知識

使用多字節字符集的跨平台(PC、Android、IOS、WP)編碼/解碼方法,androidios


隨著移動端的發展,跨平台已成為通訊架構設計的重要考慮因素,PC、Android、IOS、WP等跨多平台間的數據通訊,必然要解決字符編碼/解碼的問題。

多字節字符集MBCS不是跨平台的首選字符集,面向跨平台、國際化的推薦字符集肯定是UNICODE。

寫VC的人都知道,在以前VC++6.0中默認的字符集是多字節字符集,而VS2005及以後默認的字符集是Unicode,VS2013中默認不再對多字節字符串進行支持。

但對很多較早的服務端項目,依然使用的是多字節字符集,不過使用多字節字符集依然可以實現跨平台數據通信的字符編碼/解碼。

本著科普的態度,先解釋清楚多字節字符集。。。

單字節SBCS:single-byte character set,用一個Byte來編碼字符。如:ASCII。

多字節MBCS:multi-byte character set,用多個Byte來編碼字符。如Unicode,GBK。

在VC中使用多字節字符集時,在中文Windows上實際使用的是GBK編碼,GBK編碼是GB2312的一個擴展,向前兼容GB2312並增加2W多個漢字,實際上GB系列包含GB2312、GBK、GB18030三個版本。

下面說下使用多字節字符集的跨平台(PC、Android、IOS、WP)編碼/解碼方法,只關注字符集的編解碼:

服務端:

VC工程設置,使用多字節字符集;

字符串存取使用標准庫std::string;

Android端編碼/解碼:

//解碼
ByteBuffer buffer = ByteBuffer.allocate(nDataLen); buffer.put(m_buffer); buffer.flip(); String szPacket = Charset.forName("gbk").decode(buffer).toString();
//編碼
szPacket.getBytes(Charset.forName("gbk"));

 IOS端編碼/解碼:

//解碼
NSString *szString = [[NSString alloc] initWithData:data encoding:CFStringConvertEncodingToNSStringEncoding(kCFStringEncodingGB_18030_2000)];
//編碼
[szString dataUsingEncoding:CFStringConvertEncodingToNSStringEncoding (kCFStringEncodingGB_18030_2000)];

WP端的代碼沒在手邊,有需要的可以私信我。

Android和IOS的編碼/解碼相比,Android的解碼方式要強壯很多,對於字符串中無法處理的錯誤字符會自動忽略,而IOS會直接返回nil。

所以對於IOS的字符串處理要特別小心,比如std::string的不正確substr就會導致IOS無法解析。

總體來說使用多字節字符集實現跨平台數據通信是沒有問題的,目前主流的Android、IOS、WP三大平台對GB系的字符集支持都是不錯的。


 

記錄,為更好的自己!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved