C 语言汉字写入问题及Un ico de 优势 默认分类 2009-06-13 09:22:13 阅读552 评论2 字号:大中小 订阅 常用的字符编码有以下三种: 1、ASCII 只支持英文,全部为 8 位 2、DBCS 支持英文和中文,但中文需要两个字节(16 位) 3、UNICODE 支持英文和中文,英文和中文都需要两个字节 ASCII 是 DOS 时代的,无法支持中文。 DBCS 是 Win9x 支持的字符集。UNICODE 是 win2k 和 xp 支持的字符集。 而汉字的编码目前有GB2312-1980 和 GB18030-2000,GB2312 就是 DBCS 类型的汉字编码,GB18030就是 UNICODE 的汉字编码,当然 GB18030 兼容 GB2312,也就是说 GB18030 也支持 DBCS 的字符处理方式。虽然 GB18030 是 2000 年后强制执行的国家标准,但目前使用最多的还是 GB2312 编码,而且GB2312 也足够处理你所用到的汉字了。还有GBK 编码是 GB2312 的增强版。 这里我仅支持 GB2312。由于 GB2312 是中国大陆制定的标准,所以繁体中文并不在 GB2312 的编码中,如果你的程序需要支持繁体中文,则还需要处理 Big5 编码。其实也很简单。 下面说一下在 C 中如何处理 GB2312 编码的汉字。以VC6.0 为例,如果声明变量的类型为 wchar_t 则是UNICODE 编码,如果是 char 则是 DBCS 编码比如我的一个函数声明是: void Justify (HDC hdc, PTSTR pText, RECT * prc, int iAlign) 其中的pText 是 PTSTR 类型,PTSTR 在 WINNT.H 中有两个定义(WINNT.H 中的这段代码我删掉了中间无关的部分) #ifdef UNICODE typedef LPWSTR PTSTR, LPTSTR;//如果是 UNICODE 编码,则定义 PTSTR 为 LPWSTR 类型 #else typedef LPSTR PTSTR, LPTSTR;//如果是不是 UNICODE 编码,则定义 PTSTR 为 LPSTR 类型 #endif LPSTR 定义为 CHAR 的指针 LPSWSTR 定义为 WCHAR 的指针 CHAR 定义为 char 类型 WCHAR 定义为 wchar_t 类型 而 wchar_t 定义为 unsigned short 类型,它是 16 位,两个字节,无符号短整数 "百度"两字的ASCII 码分别为: 百:B0 D9 度:B6 C8 如果要向 test_ascii.txt 写入"百"字,则可以这样写代码: #include main(){ FILE *fp1; int ascii1,ascii2; fp1=fopen("test_ascii.txt","wb+"); ascii1=0xB0; ascii2=0xD9; fwrite(&ascii1,1,1,fp1); fwrite(&ascii2,1,1,fp1); fclose(fp1); } ...