mbs: multi byte string, 用char作为存储类型, 一个字符可能对应1个或者多个char, 不能直接确定字符边界. charset不确定. 过去的程序都是采用mbs的.
wcs: wide character string, 用wchar_t作为存储类型, 一个字符对于一个wchar_t. 使用unicode编码, charset与OS相关, 在windows平台中为UTF16(UCS-2), 在大多数unix平台中为UTF32(UCS-4).
国际化的程序都应该在内部使用wcs, 在输入输出时做mbs与wcs的转换.
mbs与wcs的转换函数:
wcstombs/mbstowcs是实现转换的一对函数. wcs的charset是固定不可变的, 但是mbs的charset是可变的, 可能是ASCII, 可能是gb2312, 也可能是big5. wcstombs/mbstowcs是根据locale环境设置来决定mbs采用的charset的, 在程序中可以用setlocale来设定locale, 例如 setlocale(LC_ALL, "chinese")
程序启动时, locale设定为 LC_ALL="C", 用 setlocale(LC_ALL, "") 就可以设置成操作系统的locale设定.
Locale决定了当前程序运行的本地化设置方式, 但是在程序中可能需要作其他charset的转换, 例如程序本身语言设定为简体中文, 需要做big5与unicode的转换, 或者是其他两种charset的mbstombs转换, 这时wcstombs/mbstowcs就不能胜任了. 在unix平台中可以使用iconv来做这个转换(iconv lib也有windows版本), 在windows平台可以用MultiByteToWideChar/WideCharToMultiByte 函数.
参考资料: http://xcin.linux.org.tw/i18n/pc2000/p3/chinese-3.html
----------------------------------------------------------------
wcstombs和mbstowcs使用
#include <locale.h>
setlocale(LC_ALL, ".936");
wcstombs(char * to,wchar_t * from,size_t _maxCount);
mbstowcs(wchar_t * to,char * from,size_t _maxCount);
分享到:
相关推荐
C标准库源代码\MBSTOWCS.C C标准库源代码\MBSTRING.H C标准库源代码\MBSUPR.C C标准库源代码\MBTOHIRA.C C标准库源代码\MBTOKATA.C C标准库源代码\MBTOLWR.C C标准库源代码\MBTOUPR.C C标准库源代码\MBTOWC.C C标准...
n=mbstowcs(wt,input,x);//将汉字转换成宽字符类型 sprintf(output+4*i,"X",wt[i]);//将宽字符型转换成十六进制 sscanf(ch+4*x,"X",wch+x);//将十六进制转换成宽整形 n=wcstombs(utf,wch,unicode_len);//将宽整形...
4、不支持中文路径原因在wcstombs和mbstowcs转换时出现转换错误。 5、解决方法:cpp的block中的两个函数create和open中添加以下代码 #ifdef NON_ENGLISH_PATH_FILENAME_SUPPORT size_t filenameLength = wcslen...
3.1 C和C++中的真值和假值 3.2 选择语句 3.3 迭代语句 3.4 在选择和迭代语句内声明变量 3.5 跳转语句 3.6 表达式语句 3.7 块语句 第4章 数组和以null结束的字符串 4.1 一维数组 4.2 生成指向数组的指针 4.3 向函数...
中文与unicode之间的相互转换,没有用CString,Linux和Windows应该都可以使用。是网上的代码,只是搬运。但是找了很久才找到的好东西。 几个关键字:wchar_t* char* WideCharToMultiByte mbstowcs wcstombs
iconv函数很强大,可以windows不带这个东西,不知道哪位大神在win下重写了iconv,很好很强大,内附使用示例
用VS2010 C++写的MFC计算器,功能包括四则运算和存储记忆、退格、清零等,可以实现连续运算,新修正了等号的BUG
basicexecl 例子,修复了编译有问题的bug
The C Library Reference Guide by Eric Huss © Copyright 1997 Eric Huss Introduction 1. Language 1.1 Characters 1.1.1 Trigraph Characters 1.1.2 Escape Sequences 1.1.3 Comments 1.2 Identifiers ...
使用libiconv1.16在win10 64位环境下vs2010编译,以及封装了一个导出函数ConvertCode,直接调用此函数即可。里面有源码演示如何调用,如果调用原库的函数,会有一些坑。