Зараз спробую пояснити сутність проблеми, як я її розумію.
Отже, є сирцевий код - у кодуванні S.
Компілятор його перетворює у виконуваний код, при цьому ресурси (зокрема рядки) можуть бути перетворені в кодування C.
Код запускається в консолі Windows з певними налаштуваннями локалі, зокрема кодуванням L (за замовчанням в кириличних Windows 866); при цьому може відбуватися відповідне перетворення.
Код символу, отриманий таким чином, використовується для того, щоб знайти в шрифті, який використовується консоллю, відповідний символ. Якщо його немає в шрифті - ви отримуєте отой знак питання в квадраті.
Таким чином, щоб бути певним у тому, що саме ви отримаєте на екрані, вам необхідно знати весь ланцюжок S->C->L і наявність відповідних символів в шрифті, інакше це працюватиме лише іноді і навмання.