unicode和ANSI编码格式转换?不要再提MultiByteToWideChar呦。该如何处理

unicode和ANSI编码格式转换?不要再提MultiByteToWideChar呦。
char* 和 wchar_t*之间的转换。
MSDN http://msdn.microsoft.com/zh-cn/library/ms235631(v=vs.90).aspx
给的函数是mcs_bstows,这函数只是简单的在一字节的字符前补一个值为0的字节,变成宽字符。
所以可以处理英文字符,中文就要乱码。

那么除了MultiByteToWideChar,各位还知晓别的方案么?
------解决方案--------------------
cat t.cpp && g++ t.cpp && ./a.out
#include <clocale>
#include <cstdlib>
#include <cstdio>

int main()
{
 //windows下改成setlocale(LC_CTYPE, "chs");
  setlocale(LC_CTYPE, "zh_CN.utf8"); //成功与否和你的系统有关.
  wchar_t wcs[32];
  mbstowcs(wcs, "我是中国人", 32);
  printf("%ls\n", wcs);
  return 0;
}
我是中国人

------解决方案--------------------
setlocale(LC_CTYPE, "zh_CN.utf8"); //成功与否和你的系统有关.

  wchar_t wcs[32];
  _swprintf_s(wcs, L"%S", "我是中国人");//注意是大写的S
  printf("%ls\n", wcs);
------解决方案--------------------
char ch[100];
wchar_t *wch= L"hello world";
sprintf(ch,"%s",CW2A(wch));

wchar_t wch[100];
char *ch = "hello world";
sprintf(wch,L"%s",CA2W(ch));

记得包含CW2A和CA2W的头文件
------解决方案--------------------
所有其它函数的内部实现最终还是要调用MultiByteToWideChar
参考:
C:\Program Files\Microsoft Visual Studio\VC98\CRT\SRC\MBSTOWCS.C

C:\Program Files\Microsoft Visual Studio\VC98\ATL\Include\ATLCONV.H
的内容。