Вы не должны использовать устаревшие extended ASCII encodings, поскольку они в настоящее время устарели. Как user1937198 сказал, 156
- это код символа £
в архаике Windows-1252* encoding. Внешний вид символов, отличных от ASCII в этих кодировках, зависит от выбранного пользователем codepage, что делает невозможным смешивание символов из разных кодовых страниц в соответствии с такой схемой. Кроме того, ваши пользователи будут очень смущены, если они выберут неправильную кодовую страницу.
Вместо этого используйте вместо этого Unicode. Так как вы на Windows, you should probably use UTF-16, в этом случае правильный способ заявить:
// make sure the source code is saved as UTF-16!
const wchar_t poundSign[] = L"£";
const wchar_t euroSign[] = L"€";
В UTF-16, нет никакой гарантии, что один символ будет принимать только один символ из-за surrogate mechanism, следовательно, это лучше хранить «символы» * как строки.
Имейте в виду, что это означает, что остальная часть вашей программы должна также переключиться на Unicode: используйте «W» версии Windows API (WCHAR
-версии).
[*] В техническом оформлении каждый символ «Юникод» упоминается как кодовая точка.
Это не ASCII. Вы имели в виду [Windows-1252] (http://en.wikipedia.org/wiki/Windows-1252)? – user1937198
кодовые страницы - самое плохое, что произошло (для неамериканцев, конечно). Используйте Unicode. Предпочтительно utf8. Я знаю, что стандартная поддержка C++ для utf8 является ужасной, но есть такие опции, как [ICU] (http://site.icu-project.org/) и [Boost.Locale] (http://www.boost.org/doc /libs/1_51_0/libs/locale/doc/html/index.html) – bolov
Связанный: [this] (http://stackoverflow.com/q/19987448/509868) вопрос, который использует UTF-8 (может быть лучше, чем UCS-16) – anatolyg