title: Why we convert from MultiByte to WideChar?
body: <p>I am used to deal with ASCII strings but now with UNICODE I am too much confused about some terms:</p>
  
  <p>What is a multi-byte character and what is a <code>widechar</code> What's the difference?
  Does multi-byte refers to a character that contains more than one byte in memory and <code>widechar</code> is just a data type to represent it?</p>
  
  <ul>
  <li>Why do we convert from <code>MultiByteToWideChar</code> and <code>WideCharToMultiByte</code>?</li>
  </ul>
  
  <p>If I declare something like this:</p>
  
  <pre><code>wchar_t* wcMsg = L"مرحبا";
  MessageBoxW(0, wcMsg, 0, 0);
  </code></pre>
  
  <p>It prints the message correctly if I defined <code>UNICODE</code> But why I didn't convert here from <code>WideCharToMultiByte</code>??</p>
  
  <ul>
  <li><p>What is the difference between character set in my project: <code>_MBCS</code> and <code>UNICODE</code>?</p></li>
  <li><p>One last thing MSDN confuses me with "Windows APIs" are UTF-16.</p></li>
  </ul>
  
  <p>Can anyone explain with some examples. A good clarification is really appreciated. </p>