You can't (unless the console font on your system has Greek characters defined
and you know their numbers; then you can use printf("%xNN") where NN is the
number in hex).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Unlike GUI apps, Windows' console mode does not support Unicode, so it is in
fact very hard to achieve portably. The available character set in console
mode is dependent on the code page set, which is in turn dependent on teh
country settings of a particular installation.
There are two different code pages
that support the full Greek alphabet
( and http://en.wikipedia.org/w
iki/Code_page_869). Other code
pages typically support a subset of Greek letters commonly used in mathematics
and engineering (such as mu).
To determine the code page of your system. open a command console and enter
the CHCP command. This also allows you to change the code page according to
its documentation, although on current versions of Windows it appears to have
no actual affect on the character set as far as I can tell.
To enter a particular character from its code, set NumLock on, hold down the
ALT key, and type the decimal character code on the numeric keypad, or use the
character code directly in the code:
define MU 0xb5 // for Cope Page 850
printf( "%c", MU ) ;
Note drmoo's method of specifying hexadecimal character codes is incorrect. It
should be :
printf( "\xNN" ) ;
so to rint mu in CP 850:
printf( "\xb5" )
Note that if you use the numeric keypad entry method, because GUI apps use a
different character set, some characters may appear different in the GUI
editor than in the output console. And of course your output may not appear
the same on a differently set up system with a different locale.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Note however this output is only possible when the console is configured to
use a TrueType monospaced font (such as Lucida Console), it does not work with
default raster fonts. Unfortunately console setup is a user setting not a
program setting.
Your best solution is to write a Unicode GUI application.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Note teh charcters displayed above do not match exactly what was on my screen,
because the browser itself is a GUI app, some characters shown are not
available in the console. YMMV.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
You cannot set the code page of your process using the system() function.
system() creates a separate cmd.exe process, and you will have set the CP for
that temporary process only. That is why I set the code page on the command
line before running my test code. You should instead use SetConsoleOutputCP()
Also, I have not tried it but you may be able to switch the console font using SetCurrentConsoleFontEx(); that is what I said earlier may not in
fact be true.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
I recall finding the same when I have previously attempted it. Ultimately I
reckon that attempting to 'internationalise' console apps is so fraught with
barriers, that it is easier simply to use GDI.
Besides the OP has not responded so I suspect we are talking to ourselves
here!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
how can i use greek characters in printf function ?
You can't (unless the console font on your system has Greek characters defined
and you know their numbers; then you can use printf("%xNN") where NN is the
number in hex).
Unlike GUI apps, Windows' console mode does not support Unicode, so it is in
fact very hard to achieve portably. The available character set in console
mode is dependent on the code page set, which is in turn dependent on teh
country settings of a particular installation.
There are two different code pages
that support the full Greek alphabet
( and http://en.wikipedia.org/w
iki/Code_page_869). Other code
pages typically support a subset of Greek letters commonly used in mathematics
and engineering (such as mu).
To determine the code page of your system. open a command console and enter
the CHCP command. This also allows you to change the code page according to
its documentation, although on current versions of Windows it appears to have
no actual affect on the character set as far as I can tell.
To enter a particular character from its code, set NumLock on, hold down the
ALT key, and type the decimal character code on the numeric keypad, or use the
character code directly in the code:
Note drmoo's method of specifying hexadecimal character codes is incorrect. It
should be :
so to rint mu in CP 850:
Note that if you use the numeric keypad entry method, because GUI apps use a
different character set, some characters may appear different in the GUI
editor than in the output console. And of course your output may not appear
the same on a differently set up system with a different locale.
Yeah, that was a typo.
I take it back about CHCP having no apparent effect. Here is a character set
dump for 850 (Latin multilingual) and 869 (Modern Greek).
D:\Clifford\Documents\Visual Studio 2008\Projects\scratch\Debug>chcp 850
Active code page: 850
D:\Clifford\Documents\Visual Studio 2008\Projects\scratch\Debug>scratch
☺ ☻ ♥ ♦ ♣ ♠
♫ ☼ ► ◄ ↕ ‼ ¶ § ▬ ↨ ↑ ↓ → ← ∟ ↔ ▲ ▼ ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5
6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O
P Q R S T U V W X Y Z ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y
z { | } ~ ⌂ C u e a a a a c e e e i i i A A E ?
? o o o u u y O U o £ O ? f a i o u n N ? ? ? R ¬ ½ ? ? « » ░ ▒ ▓ │ ┤ A A A ©
╣ ║ ╗ ╝ ? Y ┐ └ ┴ ┬ ├ ─ ┼ a A ╚ ╔ ╩ ╦ ╠ ═ ╬ o ? ? E E
E ? I I I ┘ ┌ █ ▄ ¦ I ▀ O ? O O o O μ ? ? U U U y Y ? ΄ ± ? ? ¶ § ? ? ° ¨ ·
? ³ ² ■
D:\Clifford\Documents\Visual Studio 2008\Projects\scratch\Debug>chcp 869
Active code page: 869
D:\Clifford\Documents\Visual Studio 2008\Projects\scratch\Debug>scratch
☺ ☻ ♥ ♦ ♣ ♠
♫ ☼ ► ◄ ↕ ‼ ¶ § ▬ ↨ ↑ ↓ → ← ∟ ↔ ▲ ▼ ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5
6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O
P Q R S T U V W X Y Z ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y
z { | } ~ ⌂ Ά · ¬ ¦ ‘ ’ Έ ― Ή Ί Ϊ
Ό Ύ Ϋ © Ώ ² ³ ά £ έ ή ί ϊ ΐ ό ύ Α Β Γ Δ Ε Ζ Η ½ Θ Ι « » ░ ▒ ▓ │ ┤ Κ Λ Μ Ν
╣ ║ ╗ ╝ Ξ Ο ┐ └ ┴ ┬ ├ ─ ┼ Π Ρ ╚ ╔ ╩ ╦ ╠ ═ ╬ Σ Τ Υ Φ Χ
Ψ Ω α β γ ┘ ┌ █ ▄ δ ε ▀ ζ η θ ι κ λ μ ν ξ ο π ρ σ ς τ ΄ ± υ φ χ § ψ ΅ ° ¨ ω
ϋ ΰ ώ ■
D:\Clifford\Documents\Visual Studio 2008\Projects\scratch\Debug>
Note however this output is only possible when the console is configured to
use a TrueType monospaced font (such as Lucida Console), it does not work with
default raster fonts. Unfortunately console setup is a user setting not a
program setting.
Your best solution is to write a Unicode GUI application.
Note teh charcters displayed above do not match exactly what was on my screen,
because the browser itself is a GUI app, some characters shown are not
available in the console. YMMV.
Strange; here is what I get when using a non-raster font:

Code:
I wish sourceforge would use a fixed width font like Courier New for code
tags.
You cannot set the code page of your process using the system() function.
system() creates a separate cmd.exe process, and you will have set the CP for
that temporary process only. That is why I set the code page on the command
line before running my test code. You should instead use
SetConsoleOutputCP()
Also, I have not tried it but you may be able to switch the console font using
SetCurrentConsoleFontEx(); that is what I said earlier may not in
fact be true.
Ah, okay; thanks Clifford.
SetCurrentConsoleFontEx() doesn't seem to work.
I recall finding the same when I have previously attempted it. Ultimately I
reckon that attempting to 'internationalise' console apps is so fraught with
barriers, that it is easier simply to use GDI.
Besides the OP has not responded so I suspect we are talking to ourselves
here!