Use the multi-Byte Character Set cross-platform (PC, Android, IOS, WP) encoding/decoding method, androidios
With the development of mobile terminals, cross-platform communication architecture design has become an important consideration. Data Communication between PCs, Android, IOS, and WP across multiple platforms, it is necessary to solve the problem of character encoding/decoding.
Multi-Byte Character Set MBCS is not the preferred character set for cross-platform and International Recommendation character sets.
Anyone who writes VC knows that in the past, the default Character Set of VC ++ 6.0 was a multi-Byte Character Set, while the default Character Set of VS2005 and later was Unicode, multi-byte strings are no longer supported by default in VS2013.
However, for many earlier server projects, the multi-Byte Character Set is still used, but the multi-byte character set can still be used for cross-platform Data Communication character encoding/decoding.
Based on the popular science attitude, first explain the multi-byte character set...
Single-byte SBCS: single-Byte character set, which uses a byte to encode characters. For example, ASCII.
Multi-byte MBCS: multi-Byte character set, which uses multiple bytes to encode characters. Such as Unicode and GBK.
When using multi-byte character sets in VC, GBK encoding is actually used in Chinese Windows, and GBK encoding is an extension of GB2312. It is compatible with GB2312 and adds more than Chinese characters, in fact, the GB series includes three versions: GB2312, GBK, and GB18030.
The following describes how to use cross-platform (PC, Android, IOS, and WP) encoding/decoding methods for multi-byte character sets. Only the encoding and decoding of character sets are concerned:
Server:
VC Project Settings, using the multi-Byte Character Set;
Use the standard library std: string for string access;
Android encoding/decoding:
// Decoding
ByteBuffer buffer = ByteBuffer. allocate (nDataLen); buffer. put (m_buffer); buffer. flip (); String szPacket = Charset. forName ("gbk "). decode (buffer ). toString ();
// Encoding
SzPacket. getBytes (Charset. forName ("gbk "));
IOS terminal encoding/decoding:
// Decoding
NSString * szString = [[NSString alloc] initWithData: data encoding: CFStringConvertEncodingToNSStringEncoding (kCFStringEncodingGB_18030_2000)];
// Encoding
[SzString dataUsingEncoding: CFStringConvertEncodingToNSStringEncoding (kCFStringEncodingGB_18030_2000)];
The WP code is not at hand. If you need it, you can trust me.
Compared with the encoding/Decoding of Android and IOS, Android is much more powerful in decoding methods. errors that cannot be processed in strings are automatically ignored, while IOS directly returns nil.
Therefore, you must be especially careful when handling IOS strings. For example, if the std: string is incorrect, substr will cause IOS to fail to parse the string.
Generally, multi-byte character sets can be used for cross-platform Data Communication. Currently, the mainstream Android, IOS, and WP platforms support the GB character sets well.
Record, for better yourself!