Unicode/Ansi/UTF8字符串的处理

时间:2022-01-06 21:10:04

Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu  转载请标明来源 

 

1. 存储

Ansi存储的时候使用char

Unicode存储的时候使用wchar_t

Ansi/Unicode均支持的时候用TCHAR

 

2. 相关的字符串函数,字符串转数字相关的

atoi     char使用

_wtoi w_char_t使用

_ttoi   TCHAR使用

 

这篇文章介绍CString/string/char*/w_char/char之间的转换:

http://blog.163.com/xubin_3@126/blog/static/1129877022009111583134670/

 

 

unicode转utf8: utf8转unicode. 调用::MultiByteToWideChar

http://www.cnblogs.com/gakusei/articles/1585211.html

 http://www.cppblog.com/sunraiing9/archive/2007/03/21/20281.html

 

3. GetBuffer讲解:

http://blog.csdn.net/lewutian/article/details/6787024

 http://blog.csdn.net/guanchanghui/article/details/1217096

 

4. 参见Locale|区域设置的说明

(引用自:http://technet.microsoft.com/zh-cn/library/wyzd2bce.aspx)

区域设置:是指您可以使用自定义程序的国家/地区和语言设置。一些与区域设置相关的类别包括日期和货币值的显示格式。有关更多信息,请参见区域设置类别

当使用函数,而无需 _l后缀时,请使用setlocale功能更改或查询部分或全部当前程序或线程区域设置信息。与 _l后缀的功能将使用仅在该特定功能的执行过程中传递的。这些区域设置信息区域设置参数。用与 _l后缀的函数创建一个区域设置用于,请使用_create_locale。若要释放该区域设置,请使用_free_locale。获取当前区域设置,使用_get_current_locale

使用 _configthreadlocale 控件每个线程是否有其自己的区域设置,或者在程序中的所有线程共享同一区域设置。有关更多信息,请参见区域设置和代码页

函数的更安全版本下表中可用,指示由 _s (“安全”)后缀。有关更多信息,请参见CRT中的安全功能

与区域设置相关的实例

实例

用途

设置依赖项的setlocale类别

atof _atof_l _wtof _wtof_l

为浮点值的转换字符

LC_NUMERIC

atoi _atoi_l _wtoi _wtoi_l

为整数值的转换字符

LC_NUMERIC

_atoi64 _atoi64_l _wtoi64 _wtoi64_l

对于 64 位整数值的转换字符

LC_NUMERIC

atol _atol_l _wtol _wtol_l

对于长的值将字符

LC_NUMERIC

_atodbl _atodbl_l _atoldbl _atoldbl_l _atoflt _atoflt_l

对于双长的值的转换字符

LC_NUMERIC

是实例

测试特定条件的特定整数。

LC_CTYPE

isleadbyte _isleadbyte_l

测试前导字节

LC_CTYPE

localeconv

读取格式的数字的数目适当的值

LC_MONETARY, LC_NUMERIC

MB_CUR_MAX

最大字节长度任何多字节字符在当前区域设置 ( STDLIB.H)定义的宏

LC_CTYPE

_mbccpy _mbccpy_l,_mbccpy_s _mbccpy_s_l

复制一个多字节字符

LC_CTYPE

_mbclen mblen _mblen_l

验证并返回字节数在多字节字符的

LC_CTYPE

strlen strlen_l wcslen wcslen_l _mbslen _mbslen_l _mbstrlen _mbstrlen_l

为多字节字符字符串:验证在字符串中的每个字符;返回字符串的长度

LC_CTYPE

mbstowcs _mbstowcs_l,mbstowcs_s _mbstowcs_s_l

转换多字节字符序列转换为宽字符对应的顺序

LC_CTYPE

mbtowc _mbtowc_l

转换多字节字符转换为相应的宽字符

LC_CTYPE

printf功能

编写格式化输出

LC_NUMERIC (确定基数字符输出)

scanf功能

读取的格式化输入

LC_NUMERIC (确定基数字体标识)

setlocale _wsetlocale

为程序选择区域设置

不适用

strcoll wcscoll _mbscoll _strcoll_l _wcscoll_l _mbscoll_l

比较两个字符串字符

LC_COLLATE

_stricmp _wcsicmp _mbsicmp _stricmp_l _wcsicmp_l _mbsicmp_l

比较两个字符串不考虑用例

LC_CTYPE

_stricoll _wcsicoll _mbsicoll _stricoll_l _wcsicoll_l _mbsicoll_l

比较两个字符串 (不区分大小写)字符

LC_COLLATE

_strncoll _wcsncoll _mbsncoll _strncoll_l _wcsncoll_l _mbsncoll_l

比较两个字符串第一 n字符

LC_COLLATE

_strnicmp _wcsnicmp _mbsnicmp _strnicmp_l _wcsnicmp_l _mbsnicmp_l

比较两个字符串字符不考虑大小写。

LC_CTYPE

_strnicoll _wcsnicoll _mbsnicoll _strnicoll_l _wcsnicoll_l _mbsnicoll_l

比较两个字符串 (不区分大小写)第一 n字符

LC_COLLATE

strftime wcsftime _strftime_l _wcsftime_l

根据所提供的 format参数设置日期和时间值

LC_TIME

_strlwr _wcslwr _mbslwr _strlwr_l _wcslwr_l _mbslwr_l,_strlwr_s _strlwr_s_l _mbslwr_s _mbslwr_s_l _wcslwr_s _wcslwr_s_l

转换,例如,在特定字符串的每个大写字母转换为小写

LC_CTYPE

strtod _strtod_l wcstod _wcstod_l

将字符串转换为 double

LC_NUMERIC (确定基数字体标识)

strtol wcstol _strtol_l _wcstol_l

将字符串转换为 long

LC_NUMERIC (确定基数字体标识)

strtoul _strtoul_l wcstoul _wcstoul_l

将字符串转换为无符号 long

LC_NUMERIC (确定基数字体标识)

_strupr _strupr_l _mbsupr _mbsupr_l _wcsupr_l _wcsupr,_strupr_s _strupr_s_l _mbsupr_s _mbsupr_s_l _wcsupr_s _wcsupr_s_l

转换,例如,在字符串的每个小写字母转换为大写

LC_CTYPE

strxfrm wcsxfrm _strxfrm_l _wcsxfrm_l

转换字符串转换为排列的基于窗体区域设置

LC_COLLATE

tolower _tolower towlower _tolower_l _towlower_l,_mbctolower _mbctolower_l _mbctoupper _mbctoupper_l

转换特定字符转换为相应的小写字母

LC_CTYPE

toupper _toupper towupper _toupper_l _towupper_l,_mbctolower _mbctolower_l _mbctoupper _mbctoupper_l

转换特定字符转换为相应的大写字母

LC_CTYPE

wcstombs _wcstombs_l,wcstombs_s _wcstombs_s_l

将宽字符序列分成多字节字符对应的顺序

LC_CTYPE

wctomb _wctomb_l,wctomb_s _wctomb_s_l

宽字符转换为相应的多字节字符

LC_CTYPE

说明

为多字节实例,多字节代码页绑定等效于区域设置与setlocale_setmbcp,与_MB_CP_LOCALE的参数进行多字节代码页与相同 setlocale代码页的。