Visual C++中的单字节、双字节、Unicode、可重定向函数
acmilan2015/12/14软件综合 IP:四川
单字节函数可以处理Windows单字节代码页(874,1250-1258)字符串
双字节函数可以处理Windows双字节代码页(932,936,949,950)和单字节代码页的字符串
Unicode(宽字符)函数可以处理Windows NT/2000支持的Unicode字符串(UTF-16编码)。
和UNIX不同,Visual C++的单字节函数和双字节函数并不支持UTF-8。新程序微软推荐使用Unicode函数或可重定向函数。

如:
可重定向函数_tfopen 单字节函数fopen 双字节函数fopen Unicode函数_wfopen
可重定向函数_tcsnccpy 单字节函数strncpy 双字节函数_mbsncpy Unicode函数wcsncpy

可重定向函数,字符使用_TCHAR(部分使用_TXCHAR),字符串常量使用_T("")
单字节函数,字符使用char,字符串常量使用""
双字节函数,字符使用char(部分使用unsigned char),字符串常量使用""
Unicode函数,字符使用wchar_t,字符串常量使用L""

未定义任何常量,可重定向函数被重定向到单字节函数,_TCHAR/_TXCHAR被重定向为char,_T("")被替换为""
定义_MBCS后,可重定向函数被重定向到双字节函数,_TCHAR/_TXCHAR被重定向为char/unsigned char,_T("")被替换为""
定义_UNICODE后,可重定向函数被重定向到Unicode函数,_TCHAR/_TXCHAR被重定向为wchar_t,_T("")被替换为L""

论坛对于表格的排版有问题,没法发表格,可参考MSDN Library:
XXXXXXXXXXXXXXXXXXXXXXXXXX/en-us/library/XXXXXXXXXXXpx

【Visual C++宽字符函数(安全函数从略)】

这些函数大部分被定义在<wchar.h>头文件中。没有列入ANSI标准或与ANSI标准有冲突的函数称为CRT函数,以下划线开头。

程序入口点
wmain wWinMain

数据类型
wchar_t wint_t _wfinddata_t __wfinddata64_t _wfinddatai64_t

常量和全局函数
WEOF _wenviron _wpgmptr

系统相关函数(ANSI/POSIX无宽字符形式,都是CRT函数且均有_w前缀)
_waccess _wchdir _wchmod _wcreat _wunlink _wrename _wrmdir _wmkdir _wmktemp _wopen _wpopen _wsopen _wtempnam _wtmpnam _wgetcwd _wutime _wutime32 _wutime64 _wstat _wstat32 _wstati32 _wstat64 _wstati64
_wfullpath _wmakepath _wsplitpath
_wfdopen _wfopen _wfreopen _wfsopen
_wfindfirst _wfindnext _wfindnext32 _wfindnext64 _wfindnexti64 _wfindnexti6432 _wfindnext32i64
_wsystem _wexecl _wexecle _wexeclp _wexeclpe _wexecv _wexecve _wexecvp _wexecvpe _wspawnl _wspawnle _wspawnlp _wspawnlpe _wspawnv _wspawnve _wspawnvp _wspawnvpe
_wgetenv _wputenv _wsearchenv
_wstrdate _wstrtime
_wsetlocale

字符串(第一行是ANSI函数,第二行是CRT函数,第三行是应用价值不高的迭代函数)
wcslen wcscpy wcsncpy wcscat wcsncat wcscmp wcsncmp wcschr wcsrchr wcsstr wcscoll wcspbrk wcsspn wcscspn wcsxfrm
_wcsset _wcsnset _wcsicmp _wcsnicmp _wcsicoll _wcsnicoll _wcsdup _wcslwr _wcsupr _wcsspnp _wcsrev
_wcsinc _wcsdec _wcsncnt _wcsnextc _wcsninc

字符串格式化函数(第一行是ANSI函数,第二行是CRT函数)
swprintf swscanf vswprintf wcsftime
_scwprintf _snwprintf _snwscanf _vscwprintf _vsnwprintf

字符类型函数(ANSI函数)
iswalnum iswalpha iswascii iswcntrl iswdigit iswgraph iswlower iswprint iswpunct iswspace iswupper iswxdigit towlower towupper

简单数据转换函数(第一行是ANSI函数,第二行是CRT函数)
wcstod wcstol wcstoul
_itow _ltow _wasctime _wcstoi64 _wcstoui64 _wctime _wctime32 _wctime64 _wtof _wtoi _wtoi64 _wtol _ui64tow _ultow _wcserror

文件输入输出函数(输出效果取决于locale和文件的mode,也可用于控制台)
fgetwc fgetws fputwc fputws fwprintf fwscanf vfwprintf
_fgetwchar _fputwchar

控制台输入输出函数(输出效果取决于locale和控制台的mode)
getwc getwchar getws putwc putwchar wprintf wscanf ungetwc vwprintf
_cgetws _cputws _getwch _getwche _putwch _putws _wperror _ungetwch

[修改于 8年5个月前 - 2015/12/18 00:51:44]

来自:计算机科学 / 软件综合
5
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
acmilan 作者
8年5个月前 修改于 8年5个月前 IP:四川
800799
注意vc2005等旧版运行库中有些函数虽然是Unicode函数,但是可能不能在Unicode控制台模式下使用,如_putws和_getws_s,需要改用fputws和fgetws。在vc2010sp1等某些版本的运行库中,对stdin设置Unicode模式可能会导致变为按二进制读取而乱码。新版运行库修复了这些问题,vc2015中已经没有这些问题了。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
8年5个月前 IP:四川
800801
所以说,将UNIX程序用MinGW移植的结果就是失去UTF-8支持。移植UNIX程序最好的方法是Cygwin。许多在UNIX环境下工作良好的软件移植到Windows后不支持中文路径或Unicode路径也是因为这个原因。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
金星凌日
8年5个月前 IP:陕西
800805
引用 acmilan:
所以说,将UNIX程序用MinGW移植的结果就是失去UTF-8支持。移植UNIX程序最好的方法是Cygwin。许多在UNIX环境下工作良好的软件移植到Windows后不支持中文路径或Unicode路径也是因为这个原因。
那MinGW-w64呢?
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
8年5个月前 IP:四川
800817
引用 金星凌日:
那MinGW-w64呢?
MinGW-w64好像只是增加了wmain和wWinMain的支持。。。
除非作者针对Windows平台做了条件编译,否则是一样的,MinGW-w64也是基于MSVCRT的。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
acmilan作者
8年5个月前 修改于 8年5个月前 IP:四川
800944
当然,使用不使用微软的宽字符扩展,要看情况。
编写普通的C/C++算法和简单的程序,是不需要使用宽字符扩展的。
编写需要处理自定义路径等问题的复杂工具程序,就必须使用宽字符扩展了,否则可靠性会下降。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
所属分类
上级专业
同级专业
acmilan
进士 学者 笔友
文章
461
回复
2934
学术分
4
2009/05/30注册,5年3个月前活动
暂无简介
主体类型:个人
所属领域:无
认证方式:邮箱
IP归属地:未同步
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
支持的图片格式:jpg, jpeg, png
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}