2015-01-21 5 views
0

Я создаю небольшую валюту преобразовывая программу в C++ в Visual Studio 2013.Евро Символ C++

Для знака фунта, я создал переменный обугленный с помощью кода для Windows-1252 для символа £.

const char poundSign(156); 

Мне нужно найти способ, которым я могу реализовать символ для символа €, евро. Когда я запускаю программу.

+2

Это не ASCII. Вы имели в виду [Windows-1252] (http://en.wikipedia.org/wiki/Windows-1252)? – user1937198

+0

кодовые страницы - самое плохое, что произошло (для неамериканцев, конечно). Используйте 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

+0

Связанный: [this] (http://stackoverflow.com/q/19987448/509868) вопрос, который использует UTF-8 (может быть лучше, чем UCS-16) – anatolyg

ответ

0

Вы должны различать среду перевода и среду исполнения. Например, это зависит от того, где ваша программа запускается, что glyph присвоен знаку , который вы намеревались произвести (см. «Кодовая страница»).

Возможно, вы захотите проверить свой терминал или что-то, что известно в формате unicode, а затем просто использовать соответствующие кодовые точки.

Кроме того, вы не должны создавать символьные константы так, как вы делали. Вместо этого используйте литерал символа.

1

Вы не должны использовать устаревшие 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 -версии).

[*] В техническом оформлении каждый символ «Юникод» упоминается как кодовая точка.

+0

UTF-16 уродливый, тоже –

+0

@ DieterLücking: конечно, но это то, что Microsoft решила придерживаться :( – Rufflewind

Смежные вопросы