You better adopt the notion that there is no such thing as a "special character". However, there are a couple of reasons why some characters are not shown correctly.
Java will keep all strings in UTF-16 encoding internally. When you print a string, the characters are converted to the encoding of the corresponding output stream or output writer. Unfortunately, the java runtime tries to be smart and uses what is called the "default" encoding unless you explicitly demanded a specific encoding.
This hurts especially Windows users, where the default encoding often turns out to be some archaic Microsoft "code page". I have yet to find out where I can tell Windows that I don't want their CP 850 (which is the default whenever you have a german keyboard).
In the long run, you'll fare best when you make the following a habit:
- Open all your output streams (or writers) with UTF-8 encoding. Don't use System.out/System.err.
- Make sure you use a terminal that can handle UTF-8. If you're on windows, enter
chcp 65001
to set the encoding of the cmd-window to UTF-8 and use a font that can render the UTF characters.