wcstombs 使用,支持中文档unicode

转载 2013年12月02日 08:03:52

 

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.


示例代码如下:

  1. void testTNL()  
  2. {  
  3.     char* old_locale = _strdup(setlocale(LC_CTYPE,NULL)); //store the old locale   
  4.     setlocale(LC_CTYPE,setlocale(LC_ALL,"")); //using the locale of the user env.   
  5.   
  6.     const unsigned int nMaxPathLen = 255;  
  7.     wchar_t szPath[nMaxPathLen + 1] = {0};  
  8.     GetModuleFileName(NULL, szPath, nMaxPathLen);  
  9.     wchar_t   *p = wcsrchr(szPath, '\\');  
  10.     *p = 0;  
  11.   
  12.     unsigned int _Dsize = (nMaxPathLen + 1) * 2;  
  13.     char *_Dest = new char[_Dsize];      
  14.     memset(_Dest,0,_Dsize);  
  15.   
  16.     wcstombs(_Dest,szPath,_Dsize);  
  17.   
  18.     //restore the old locale.   
  19.     setlocale(LC_CTYPE, old_locale);  
  20.     free(old_locale);  
  21.   
  22.     delete[] _Dest;  
  23.     _Dest = NULL;  
  24.   
  25. }  


使用CStdioFile 读写UNICODE文档

 一:写文档   1  创建文档并写入内容 CString filePath=L"C:\\unicode.txt"; CStdioFile wfile; if (!wfile.O...

unicode编码文档

  • 2013年06月08日 15:54
  • 258KB
  • 下载

VC下Unicode编程文档.docx

  • 2013年10月22日 15:42
  • 36KB
  • 下载

fstream类读取UTF-8、Unicode和ANSI文本文档乱码问题的解决方案

原文链接:https://my.oschina.net/duluo180/blog/17457 1、解决UTF-8类型的文本文档中文乱码读取(思路:将UTF-8转成Unicode然后再转ANSI)...

VC下Unicode编程文档

  • 2014年09月09日 12:16
  • 254KB
  • 下载

DOC文档《浅谈文字编码和Unicode》

  • 2011年01月24日 23:55
  • 772KB
  • 下载

关于wchar的两个常用函数wcstombs和WideCharToMultiByte

关于wchar的两个常用函数wcstombs和WideCharToMultiByte 宽字符已经困扰我很久了,以前我都是设置项目的属性把它改为多字节,不用UNICODE。不过现在又遇到宽...
  • Ylong17
  • Ylong17
  • 2011年08月21日 00:22
  • 743

mbstowcs()/wcstombs()

参考:http://blog.sina.com.cn/s/blog_55c1b83b0100wbah.html 本文介绍两个由C语言提供的宽字符(wchar_t类型)和多字节字符( 一个字符用一个或...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:wcstombs 使用,支持中文档unicode
举报原因:
原因补充:

(最多只允许输入30个字)