寬字元

宽字符（Wide character） 是计算机抽象术语（没有规定具体实现细节），表示比8位字符还宽的数据类型。不同于Unicode。

操作系统

对于Windows API及Visual Studio编译器，wchar_t是16位宽。由于不能在单个wchar_t字符中，支持系统所有可表示的字符（即UTF-16小尾字符），因而破坏了ANSI/ISO C标准。
在类Unix系统中，wchar_t是32位宽。单个wchar_t字符可表示任意UTF-32大尾字符。

Python

Python语言使用wchar_t作为字符类型Py_UNICODE的基础。它依赖于该系统是否wchar_t“兼容于被选择的Python Unicode编译版本”。

宽窄转换

任何非宽字符的字符集，无论是单字节字符集（SBCS），还是（可变长）多字节字符集（MBCS），都称作窄字符集（narrow character set）。
宽字符集的一个用途，是作为任意两个窄字符集相互转换的中间表示。
宽字符集与窄字符集的转换，有多种方法。

使用Windows API

例如：
// we want to convert an MBCS string in lpszA  int nLen = MultiByteToWideChar(CP_ACP,
    0,
    lpszA, -1,
    NULL,
    NULL);LPWSTR lpszW = new WCHAR[nLen];  
MultiByteToWideChar(CP_ACP,
    0,   
    lpszA, -1,
    lpszW,
    nLen);// use it to call OLE here  pI->SomeFunctionThatNeedsUnicode(lpszW);// free the string  delete[] lpszW;

使用ATL 7.0的字符串转换类与宏

字符串转换类（模板）的格式为：

 C SourceType 2[ C]DestinationType[ EX]
其中SourceType与DestinationType可以是A、W、T、OLE（等价于W）。中间可选的C表示结果为const。EX表示缓冲区存放的字符数由模板参数指定。
缺省的静态缓冲区大小为128个字符。可以指定带EX后缀的模板的参数，以节约空间。可以使用第二个参数指定窄字符的locale。如果运行栈的剩余空间不够用，自动在堆上分配空间，并在超出了该变量的作用域是自动释放堆上的空间。不需要使用USES_CONVERSION宏。注意作为局部对象，如果是无名的临时实例，表达式结束时该变量将自动析构，事后再引用该实例所含的结果字符串将无效。

使用_bstr_t类

适用于Microsoft开发平台。示例：
#include <comutil.h>#pragma comment(lib, "comsuppw.lib")
 
std::string ws2s(const std::wstring& ws){
    _bstr_t t = ws.c_str();
    char* pchar = (char*)t;
    std::string result = pchar;
    return result;}

C语言标准库函数mbstowcs()和wcstombs()

定义于stdlib.h。需要预先分配目标缓冲区。