正文

宽字符集下汉字的输出2006-08-04 16:08:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/cracker007/17244.html

分享到:

vc6与devcpp确实让我难以取舍,如果两个能够很好的融合就好了。最近写宽字符输出程序的时候,它们之间又出了矛盾。哎,devcpp对标准支持的好,但是vc6使用更加方便,而且我经常要写mfc。看来是时候换vc2005了。
先把眼前的问题解决了吧,对于如何设置宽字符集,我先做一个简单的介绍:
 
C程序员一般是用 char 关键字像下面这样来声明一个字符串数组:
char str[100];      
像下面这样声明函数原形:
void strcpy( char *out, char *in );       
为了将上面的声明改成支持双字节的 UNICODE 字符集,可以用下面的方法:
wchar_t str[100];以及void wcscpy( wchar_t *out, wchar_t *in );
 
此外,微软还提供一种通过预处理指令来实现 UNICODE。每当用 Visual C++ 创建新工程时,只要确定是否支持另外一种字符集,则 AppWizard 将会在头文件中插入预处理指令。这些指令告诉编译器程序想要支持何种字符集。这样在使用VC++提供的通用数据类型时,编译器将用相应的数据类型把通用数据类型替换成所需要支持的字符集。这样很容易将代码重新编译成支持其它字符集的程序。
为了在 Visual C++ 6.0 中激活 UNICODE 标准,可以这样做:
Project=>Settings=>C/C++标签=>Preprocessor=>预处理定义中加上:
UNICODE和_UNICODE。其中_UNICODE宏用于C运行时头文件,而UNICODE宏则用于Windows头文件。当编译源代码模块时,通常要同时定义这两个宏,因为不同的头文件可能使用不同的宏。
 
如何表示Unicode字符串常量?
字符集             实例
ANSI             “string”
Unicode           L“string”
ANSI/Unicode      TEXT(“string”) 或 __TEXT(“string”) (有两条下划线)
如何表示Unicode字符数组?
ANSI              char a[N]
Unicode           wchar_t a[N]
ANSI/Unicode      TCHAR a[N]
上述的ANSI/Unicode是通用型,由是否定义了UNICODE来决定是编译为ANSI,还是编译为UNICODE。
 
在进行汉字输出的时候要注意,devcpp与vc6会“打架”,要根据不同的编译器分别进行设置。代码如下:
 
#include<iostream>
#include<locale.h>

int main(int argc, char *argv[])
{
    wchar_t cur_buff[]=L"你";
    _wsetlocale(LC_ALL,L"chs");    //vc6必须加,devcpp不能加。
    std::wcout<<cur_buff;  //c语言可以用stdio.h中的wprintf(cur_buff);
    return 0;
}

阅读(4942) | 评论(2)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册