文本处理工具用C++写的
CEdit edit.GetLine(i+1, nstr, 1000); // 读取ANSI编码文本。 len = strlen(nstr); // ANSI格式长度 num = MultiByteToWideChar(CP_ACP, 0, nstr, len, szMultiByte, sizeof(szMultiByte)); // 转换成Unicode-16后的长度 len = num<<1; File.Write(&len, sizeof(SHORT)); File.Write(szMultiByte, sizeof(wchar_t)*num);
注: #define CP_ACP 0 // default to ANSI code page
客户端java读取
static String Text_FromUNICODE(byte[] src, int offset, int len) { char[] buf = new char[len>>1]; int s = offset; for(int i = 0; i < (len>>1); i++) { buf[i] = (char)((src[s++]&0xff) | ((src[s++] << 8)&0xff00)); } return new String(buf, 0, len>>1); }
注:本来new String()支持Unicode-16,但是MultiByteToWideChar处理后写入的字节高低位跟Java相反, 所以这里要先转下。
疑问:为什么要转换成Unicode码?直接存成ANSI,然后客户端解析不久成了?
2 汉字编码表
http://www.cnblogs.com/whiteyun/archive/2010/07/06/1772218.html
UNICODE-16 UTF-8
Unicode UTF-8
U-00000000 - U-0000007F 0xxxxxxx
U-00000080 - U-000007FF 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00400000 - U-7FFFFFFF 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
http://blog.csdn.net/xfly_studio/archive/2011/01/07/6122391.aspx