#include<windowsh>
void GetUtf8(unsigned short uni)
{
unsigned char utf_8[3];
utf_8[0]=(0xe<<4) | ((uni & 0xf000)>>12);//相当于把二进制1110右移12位
utf_8[1]=(0x2<<6) | ((uni & 0x0fc0)>>6); //相当于把二进制10右移16位
utf_8[2]=(0x2<<6) | (uni & 0x003f); //相当于取二进制低6位
printf("UTF-8编码的第一个字节为0x%2x\n",utf_8[0]);
printf("UTF-8编码的第一个字节为0x%2x\n",utf_8[1]);
printf("UTF-8编码的第一个字节为0x%2x\n",utf_8[2]);
}
void main()
{
char a[3];
wchar_t str;
printf("输入一个汉字:\n");
gets(a);
MultiByteToWideChar(CP_ACP, 0, a, -1, &str, 1);
printf("%s", a);
printf("字Unicode编码为%x\n",(unsigned short)str);
GetUtf8((unsigned short)str);
}VB本身就是使用Unicode编码格式的,只要能在VB中正常显示出来的字符串都肯定是Unicode编码的。如果要把ANSI格式的字符串(在VB直接显示会出现乱码)转化为Unicode,可以这样(假定变量s储存的就是要转换的字符串):
s = StrConv(s, vbUnicode)1 Unicode概念
Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
2 gb2312编码概念
GB 2312 或 GB 2312-80 是一个简体中文字符集的中国国家标准,全称为《信息交换用汉字编码字符集·基本集》,又称为GB0,由中国国家标准总局发布,1981年5月1日实施。GB2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。
《GB2312-80》对 7445 个图形字符作了二进制数编码,这些图形字符是:
6763 个汉字,字体为简化字,分成两级。第一级汉字 3755 个,按拼音排序,约占近代文献汉字累计使用频度 999% 左右;二级汉字 3008 个,按部首、笔画排序。一、二级汉字约占累计使用频度 9999% 以上。
1)202 个一般符号。其中包括 1~20,(1)~(20),①~⑩,(-)~(+) 等。
2)22 个数字。其中 0~9 共 10 个,Ⅰ~Ⅻ 共 12 个。
3)52 个拉丁字母。其中大写字母 A~Z 26 个,小写字母 a~z 26 个。
4)169 个日文假名。其中平假名 83 个,片假名 86 个。
5)48 个希腊字母。其中大写字母 Α~Ω24 个,小写字母 α~ω 24 个。
6)66 个俄文字母。其中大写字母 А~Я33 个,小写字母 а~я 33 个。
7)26 个汉语拼音符号,包括带声调符号和其它符号的字母。
8)37 个汉语注音字母,ㄅ~ㄥ。
VB编译的程序,本身对字符串的保存、处理都是用的Unicode编码,无需转换即可得到,只不过,Unicode是双字节编码,在内存中按照高位在前,低位在后的格式保存,因此显示时需要调一下位置,代码如下:
Private Sub Command1_Click()Dim s As String, a() As Byte
s = "123,测试,test"
a = s
Text1 = ""
For i = 0 To UBound(a) Step 2
Text1 = Text1 & Format(Hex(a(i + 1)), "00") & Format(Hex(a(i)), "00") & " "
Next
End Sub
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)