afișare greșită a caracterelor românești - overflow stivă în limba rusă

Odată ce problema a ieșit la suprafață, îi voi răspunde.

Problema ta este că NetBeans „consola“ - si consola de operare - este un pic diferit. În special, au folosit diferite codificări. Optimul ar fi pentru a obține consola de codificare de curent prin intermediul API Console - dar Java nu oferă acest lucru. Prin urmare, este necesar să se obțină informații despre consola care codifică un mod diferit. De exemplu, prin console.encoding de proprietate.

Pentru început, stabilirea proprietății de la o valoare predeterminată console.encoding nimic. Această proprietate este pur și simplu nimeni nu pentru a citi. Mai degrabă decât să-l pună în cp866. ar trebui, dimpotrivă, pentru a citi valoarea de la ea.

Astfel, în loc să aștepte pentru intrare în cp866. Programul vă permite să rulați-l specifica orice codificare (UTF-8 - aceasta este codificarea implicită Înlocuiți-l cu cel care folosește consola NetBeans.). este necesar pentru a rula programul va fi ceva de genul:

La prima vedere, acest lucru pare a fi o modalitate de a rula complexe. Dar, de obicei, pentru a începe de programare „grave“ în Java utilizează întotdeauna un anumit fișier batch. Ce împiedică să adăugați cheia să-l?

Și nu uitați consola în Windows poate fi în orice codificare! De exemplu, unele programe, cum ar fi reg.exe. capabil de a lucra cu consola numai în Windows-1251. Capacitatea de a afișa în orice codificare poate fi util.

Dacă ați început deja vorbesc despre fișiere lot, atunci există o metodă mai ușoară, deși nu la fel de puternic. Puteți schimba pur și simplu codificarea consolei de pe dreapta, înainte de lansarea programului:

Aici sunt numere de pagini de cod Windows care pot fi utile:

  • 866 - cp866
  • 1251 - windows-1251
  • 65001 - utf-8 codare
  • 1200 - double-byte codare utf-16

Amintiți-vă că System.in și System.out. ca regulă, ar trebui să fie întotdeauna în același set de caractere. Trebuie să citiți programul original al scanerului cp866 de codificare System.in - și imprimanta este tipărită la System.out în codificarea implicită. Această discrepanță - de asemenea, o sursă de eroare. Nu face niciodată.