ANSI与Unicode

  1. C语言中用char数据类型来表示一个8位ANSI字符。
  2. MicroSoft的C/C++编译器定义了一个内建的数据类型wchar_t,它表示一个16位的Unicode(UTF-16)字符。
  3. 自Windows NT起,Windows的所有版本都完全用Unicode来构建。也就是说,所有核心函数(创建窗口、显示文本、进行字符串处理等等)都需要Unicode字符串。
  4. 调用Windows函数时,如果向它传入一个ANSI字符串,那么函数首先会把字符串转换为Unicode,再把结果传给操作系统。这会让系统产生时间和内存上的开销。
  5. Windows API中的一些函数(如WinExee和OpenFile)存在的唯一目的就是为了兼容16位Windows程序,因为其只支持ANSI字符串。所以在开发新程序是应避免使用这些函数。在使用WinExee和OpenFile调用的地方,应该用CreateProcess和CreateFile函数调用代替。
  6. 在C运行库中,strlen就是一个能返回ANSI字符串长度的函数。与之对应的是wcslen,这个C运行库函数能返回Unicode字符串的长度。