Renato Rodrigues
Renato Rodrigues

Reputation: 1038

Character encoding problem

Greetings,

I'm developing a project in C++ where I want to use characters like á é õ and ┌ ─ ┐ │ to draw a couple of nice frames. My doubt resides in what I should change in my code/project settings since, without any kind of modifications, the console just prints pseudo-random characters.

I know that the above characters are defined in the character set Code page 437 aka Extended ASCII, but what I should do know?

After some research, I included the instruction setlocale(LC_CTYPE, ""); and now I can print accented characters (à é õ) but can't print the borders.

Also, should I use char and string or wchar and wstring to use these characters?

Thanks

Upvotes: 3

Views: 2876

Answers (3)

Asmus
Asmus

Reputation: 1

To see which Unicode characters to use look up http://unicode.org/charts/ and search for "Box Drawing". That set includes the characters that are in CP 437, but also many others. Next question is whether your device can show some or all of these.

Upvotes: 0

Tim Čas
Tim Čas

Reputation: 10867

I think the best way to do it would be to use wchar and wstring for the characters - they are meant for locale-independant string operations and are defined as UTF-16 in Windows and as UTF-32 in Linux.

Note that you need to use the proper functions, for example wprintf instead of printf... If you're using iostream, I think that should work out-of-the-box with wstrings.

EDIT: Note that it is not required for wchar_t to be unicode (in practice, it often is). If wchar_t (and thus, wstring) is unicode, then the C99 standard (and therefore most likely the C++ standard) states that __STDC_ISO_10646__ is to be defined.

In other words, if __STDC_ISO_10646__ is defined, then the wchar_t is unicode -- as for the exact type (UTF-16 or UTF-32), you can use a sizeof(wchar_t).

Upvotes: 2

Jacob
Jacob

Reputation: 34601

Try using wchar_t

Upvotes: 0

Related Questions