char* cCharUtf = UnicodeToUtf8(wCharUnicode);
length = strlen(cCharUtf); // length = 16;
// 将UTF格式的char*转为CString
CString strUtf(cCharUtf);
length = strUtf.GetLength(); // length = 10;
CString strUnicode = UTF82WCS(cCharUtf);
数字转unicode编码length = strUnicode.GetLength(); // length = 8;
这⾥在中⽂ “中国”和“你好”之间加了英⽂的标点符号,显⽰正常。
实例三:
int length;
wchar_t* wCharUnicode = L"中国,你好abc";
length = wcslen(wCharUnicode); // length = 8;
char* cCharUtf = UnicodeToUtf8(wCharUnicode);
length = strlen(cCharUtf); // length = 18;
// 将UTF格式的char*转为CString
CString strUtf(cCharUtf);
length = strUtf.GetLength(); // length = 10;
CString strUnicode = UTF82WCS(cCharUtf);
length = strUnicode.GetLength(); // length = 8;
这⾥在中⽂ “中国”和“你好”之间加了中⽂的标点符号,cCharUtf 在VS中看不到值,但是可以转成CString查看其值,结果正确。
尾
我们从三个不同实例的测试结果中看到⼀个中⽂字符或者中⽂标点符号,占了三个字节(有资料显⽰ UTF-8编码:采⽤变长字节 ,1 :ASCII, 2: 希腊字母, 3: 汉字, 4: 中⽇韩超⼤字符集,这⾥常⽤汉字占⽤3个,不常⽤的汉字占⽤4个字节 ),中⽂标点符号与英⽂标点符号差了两个字节,这⾥要特别注意,⽽英⽂字符在UTF-8下都为⼀个字节。
同时我们可以看到⽤CString 类型变量来分别接收Unicode和UTF-8编码的字符,这⾥我们看到长度不⼀致(这⾥特值字符长度,并不是字符所占字节数),虽然我们看到UTF-8编码⽐Unicode编码要长,但是并不是绝对的,因为UTF-8在存储不同字符时所占的内存⼤⼩不⼀样,就⽐如存储ASCII码 就只需要⼀个字节,⽽Unicode需要两个字节,关于编码问题还是挺复杂的,⽽正是Unicode储存ASCII也需要两个字节,这⾥就出现了UTF-8、UTF-16、UTF-32等不同的字符编码格式,⾄于为什么会出现这么多的编码格式,那也是因为每种编码格式保存字符的空间⼤⼩不⼀致,就⽐如UTF-8保存⼀个英⽂字母只需要⼀个字节,⽽Unicode需要两个字节,但是保存⼀个中⽂字符,UTF-8需要三个字节,⽽Unicode则需要两个字节。
UTF全称为unicode transformation format,其实说⽩了,UTF-8就是Unicode的实现⽅式之⼀, ,UTF-8最⼤的⼀个特点,就是它是⼀种变长的编码⽅式。它可以使⽤1~4个字节表⽰⼀个符号,根据不同的符号⽽变化字节长度。
⽹上也有好多关于字符问题的资料,但是说法不⼀,所以还是要经过多⽅验证,这⾥需要注意⼀下。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论