windows下Unicode与ANSI的相互转换
2012-05-11 17:41
288 查看
对于windows下的wchar, tchar以及其转换函数, 比较烦人! 不过没有办法, 骂完了还是得总结总结, 把学习到的东西写下来, 以备后用.
字符编码的知识可以从维基里获得,UTF-16也就是Unicode,到ANSI也就是通常的一字节英文字符,在转换的时候的标志是CP_ACP : CodePageAnsiCodePage
1 简单的不包括中文的widechar字符串转化为普通的char.
2. 使用MultiByteToWideChar的时候要注意,因为我们不知道转出来的长度是多长,需要先传输出长度为0进去,这个函数返回的是转换会输入的以WideChar为单位的长度;然后根据返回值动态开辟内存来存放这些输出数据,再次调用此函数,传进正确的输出长度,才能确保没有字符缓冲区问题发生。
注意,这里分配的空间不需要分配k+1个,因为这个函数已经把最后的\0也算进去做字符串的个数。
字符编码的知识可以从维基里获得,UTF-16也就是Unicode,到ANSI也就是通常的一字节英文字符,在转换的时候的标志是CP_ACP : CodePageAnsiCodePage
1 简单的不包括中文的widechar字符串转化为普通的char.
CString str("2012 0625"); int nYear = 1, nMonth = 1, nDate = 1; swscanf(str.GetBuffer(), _T("%d %d"), &nYear, &nMonth); str.ReleaseBuffer(); char charstring[1024]; ZeroMemory(charstring,sizeof(charstring)); WCHAR *wcharstring=str.GetBuffer(); WideCharToMultiByte(CP_ACP,NULL,wcharstring,-1,charstring,1024,NULL,NULL); MultiByteToWideChar(CP_ACP,NULL,charstring,-1,wcharstring,1024); str.ReleaseBuffer(); sscanf(charstring, ("%d %d"), &nYear, &nMonth);
2. 使用MultiByteToWideChar的时候要注意,因为我们不知道转出来的长度是多长,需要先传输出长度为0进去,这个函数返回的是转换会输入的以WideChar为单位的长度;然后根据返回值动态开辟内存来存放这些输出数据,再次调用此函数,传进正确的输出长度,才能确保没有字符缓冲区问题发生。
char ansichar[] = "ansistring"; TCHAR *pUtf16 = 0; TCHAR myTest[64] = {0}; int k = MultiByteToWideChar(CP_ACP,0,ansichar,-1,pUtf16,0); pUtf16 = new TCHAR[k]; MultiByteToWideChar(CP_ACP,0,ansichar,-1,pUtf16,k);
注意,这里分配的空间不需要分配k+1个,因为这个函数已经把最后的\0也算进去做字符串的个数。
相关文章推荐
- windows下utf-8和unicode的相互转换
- Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
- Ansi,Unicode(little endian),Unicode big endian,UTF-8编码文件相互转换
- UNICODE和ANSI间的相互转换
- windows下快速转换unicode与ansi
- WINDOWS CE下ANSI 与 Unicode 字符相互转换
- Unicode、ANSI相互转换
- unicode、utf-8、ansi的故事及其相互转换
- 关于Unicode&UTF-8&ANSI的相互转换(Ver1.1)
- windows核心编程---UNICODE和ANSI间的相互转换
- Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
- Windows编程下, ANSI、UTF8、Unicode之间的转换
- Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
- ANSI、UNICODE、UTF-8编码格式相互之间转换
- Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
- Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
- ANSI, UNICODE与UTF8相互转换模板类
- unicode、utf-8、ansi的故事及其相互转换
- Windows环境下Unicode编程总结和将ANSI转换到Unicode 将Unicode转换到ANSI
- ANSI、UTF8、UNICODE 相互转换