cirílico en Windows Console (java) System.out.println ();

Cuando escribo texto cirílico, System.out.println (“Русский язык”) – entonces sobrepasa este ╨єёёъшщ ч√ъ, usando la consola de Windows, ¿cómo puede ser esto fijo ?, la encoding del archivo es utf-8, pero no importa, cuando era ansii o windows-1251, estaba produciendo lo mismo.

import java.io.PrintStream; class Kyrill { public static void main(String args[]) throws java.io.UnsupportedEncodingException { String ru = "Русский язык"; PrintStream ps = new PrintStream(System.out, true, "UTF-8"); System.out.println(ru.length()); System.out.println(ru); ps.println(ru); } } D:\Temp :: chcp 65001 Aktive Codepage: 65001. D:\Temp :: javac -encoding utf-8 Kyrill.java && java Kyrill 12 ??????? ???? Русский языкй язык 

Tenga en cuenta que puede ver algo de basura al final en la salida (lo hago), pero si redirige la salida a un archivo, verá que esto es solo un artefacto de visualización.

Entonces puede hacer que funcione usando un PrintStream . System.out usa la encoding de plataforma (cp1252 para mí) y no tiene caracteres cirílicos.

Nota adicional para que asimile el negocio de la encoding:

 D:\Temp :: chcp 1251 Aktive Codepage: 1251. :: This is another codepage (8 bits only) that maps bytes to cyrillic characters. :: Edit the source file to have: :: PrintStream ps = new PrintStream(System.out, true, "Windows-1251"); :: We intend to match the console output; else we won't get the expected result. D:\Temp :: javac -encoding utf-8 Kyrill.java && java Kyrill 12 ??????? ???? Русский язык 

Entonces puede ver que, al contrario de lo que algunas personas creen, la consola de Windows crea unicode en el sentido casual de que puede imprimir en griego y ruso.

Aunque puede cambiar la consola de Windows a UTF-8 por chcp 65001, es posible que aún no pueda ver la salida UTF-8 correctamente. Puede que esto no sea lo que quieres, pero al menos es una opción: redirige tu salida estándar a un archivo. Guarde su archivo fuente como UTF-8 y compílelo usando la encoding UTF-8. El archivo de salida redirigido se puede ver con un editor de texto compatible con UTF-8.

 String s = "Русский язык"; System.setOut(new PrintStream(new FileOutputStream("out.txt"), true, "UTF-8")); System.out.println(s); 

La consola de Windows usa la encoding CP866 para cirílico, por razones históricas (¿recuerda DOS?). La consola de Windows definitivamente no es apta para Unicode.

(Por desgracia, no tengo una máquina con Windows para proporcionar un fragmento de código probado).