wcstombs 使用,支持中文档unicode
来源:互联网 发布:如何恢复u盘里的数据 编辑:程序博客网 时间:2024/04/30 14:24
wcstombs 使用之二,支持中文当unicode
当你调试进入源码,你会发现wcstombs 这个函数是和locale有关的。locale如果设置不对,那么程序运行将不能得到预期结果。
当C语言程序初始化时(刚进入到 main() 时),locale 被初始化为默认的 C locale,其采用的字符编码是所有本地 ANSI 字符集编码的公共部分,是用来书写C语言源程序的最小字符集(所以才起locale名叫:C)。
也就是说,默认locale是C,字符集是ascii。
当我们的输入是一组带有中文或者其他字符的字符串时候,他就会截断。只会转化前面的ascii字符。
所以在中文路径下是不能work的。
如果我们存在中文路径,或者字符,想使用wcstombs该函数来将宽字符串转为多字节字符串,那么我们就得设置系统的当前环境的locale.
主要是使用setlocale这个函数以及两个标记 LC_CTYPE, LC_ALL.
示例代码如下:
- void testTNL()
- {
- char* old_locale = _strdup(setlocale(LC_CTYPE,NULL)); //store the old locale
- setlocale(LC_CTYPE,setlocale(LC_ALL,"")); //using the locale of the user env.
- const unsigned int nMaxPathLen = 255;
- wchar_t szPath[nMaxPathLen + 1] = {0};
- GetModuleFileName(NULL, szPath, nMaxPathLen);
- wchar_t *p = wcsrchr(szPath, '\\');
- *p = 0;
- unsigned int _Dsize = (nMaxPathLen + 1) * 2;
- char *_Dest = new char[_Dsize];
- memset(_Dest,0,_Dsize);
- wcstombs(_Dest,szPath,_Dsize);
- //restore the old locale.
- setlocale(LC_CTYPE, old_locale);
- free(old_locale);
- delete[] _Dest;
- _Dest = NULL;
- }
void testTNL(){char* old_locale = _strdup(setlocale(LC_CTYPE,NULL)); //store the old localesetlocale(LC_CTYPE,setlocale(LC_ALL,"")); //using the locale of the user env.const unsigned int nMaxPathLen = 255;wchar_t szPath[nMaxPathLen + 1] = {0}; GetModuleFileName(NULL, szPath, nMaxPathLen); wchar_t *p = wcsrchr(szPath, '\\'); *p = 0;unsigned int _Dsize = (nMaxPathLen + 1) * 2;char *_Dest = new char[_Dsize]; memset(_Dest,0,_Dsize); wcstombs(_Dest,szPath,_Dsize);//restore the old locale.setlocale(LC_CTYPE, old_locale);free(old_locale);delete[] _Dest; _Dest = NULL;}
- wcstombs 使用,支持中文档unicode
- wcstombs 使用之二,支持中文当unicode
- wcstombs()的使用
- wcstombs和mbstowcs使用
- wcstombs的使用
- wcstombs和mbstowcs使用
- wcstombs
- 在VS2015中使用easylogging++添加支持Unicode
- Linux Unicode 编程---如何(在程序中)加入并使用 Unicode 以实现外语支持
- Linux Unicode 编程---如何(在程序中)加入并使用 Unicode 以实现外语支持
- 使用CStdioFile 读写UNICODE文档
- 使用CStdioFile 读写UNICODE文档
- 使用CStdioFile 读写UNICODE文档
- c++ 中使用unicode
- 关于VB中对Unicode的支持
- Delphi中支持Unicode的TStrings类
- 关闭VC2005中对Unicode的支持
- Linux kernel 中对于Unicode的支持
- 修改Ruby的config.yml文件
- Moderate 不用比较符返回较大的数 @CareerCup
- Spring整合ActiveMQ
- 【网络协议】HTTP协议笔记
- Erlang学习:MochiWeb + ERedis
- wcstombs 使用,支持中文档unicode
- An easy understanding on deep learning
- 读《阿里云是如何失控的》有感
- 中文分词-最长匹配法的实现
- Pthread(1)
- 真封神引擎技术篇之易语言GM工具开发教程第四集
- 消息 3254,级别 16,状态 1,第 1 行 设备 '我的备份设备2(D:\丹丹\My SQL SERVER\我的备份\备份设备2.bak)' 上的卷为空。
- ubuntu下安装vim出现no terminal library found的解决
- Spring集成Hibernate 理解LocalSessionFactoryBean