javawindowsunicodeconsolecyrillic

How to print Unicode symbols U+2610 and U+2612 to Windows console with Java?


What I do:

public class Main {
    public static void main(String[] args) {
        char i = 0x25A0;
        System.out.println(i);
        i = 0x2612;
        System.out.println(i);
        i = 0x2610;
        System.out.println(i);
    }
}

What I get in IDE:

What I get in IDE

What I get in Windows console:

What I get in Windows console

I have Windows 10 (Russian locale), Cp866 default coding in console, UTF-8 coding in IDE. How to make characters in console look correct?


Solution

  • Two problems here, actually:

    1. Java converts output to its default encoding which doesn't have anything to do with the console encoding, usually. This can apparently only be overridden at VM startup with, e.g.

      java -Dfile.encoding=UTF-8 MyClass
      
    2. The console window has to use a TrueType font in order to display Unicode. However, neither Consolas, nor Lucida Console have ☐, or ☒. So they show up as boxes with Lucida Console and boxes with a question mark with Consolas (i.e. the missing glyph glyph). The output is still fine, you can copy/paste it easily, it just doesn't look right, and since the Windows console doesn't use font substitution (hard to do that with a character grid anyway), there's little you can do to make them show up.

    I'd probably just use [█], [ ], and [X] instead.