Polskie znaki

czarownik

Dziwne to jest dla mnie ale nie da się wydrukować standardowo polskich znaków w windowsie (ółśćźżń). Gdzieś przeczytałem że wystarczy skompilować program uwzględniając odpowednią stronę kodową (Cp852) np w taki sposób:
javac -g -encoding "Cp852" plik.java

Fajnie, ale jakoś mi to nie działało (może u kogoś zadziała). W każdym razie jest inny sposób o osiągnięcie celu. Można zrobić to w kodzie programu i tam ustawiając odpowiednią stronę kodową. Wystarczy stworzyć własny strumień wyjściowy, ustawić mu stronę kodową taką jaką chcemy i wtedy do niego pisać :) A teraz jak to zrobić:

import java.io.*;

class MyPrintStream{
    String encoding;  // tutaj zmienna która będzie przechowywała naszą stronę kodową

    // konstruktor który będzie ustawiać wskazaną stronę kodową przy tworzeniu obiektu
    MyPrintStream(String encoding){
        this.encoding=encoding;
    }

    void drukuj(String tekst){
        try{
            //tworzymy własny strumień wyjściowy podawając w jednym
            //z parametrów ("encoding") nazwę strony kodowej
            PrintWriter o = new PrintWriter(new OutputStreamWriter(System.out,encoding), true); 
            //i dopiero jego używamy do wypisania tekstu
            o.println(tekst);
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

// przykład użycia powyższej klasy
public class Test{
    public static void main(String args[]){
        //tworzymy obiekt naszej klasy nakazując mu używanie strony kodowej "Cp852"
        MyPrintStream p = new MyPrintStream("Cp852"); 
        p.drukuj("zażółć gęślą jaźń");  //klasyczny test obsługi polskiego charsetu
    }
}

KONIEC ;)

FAQ

4 komentarzy

@ArTaN, tworząc OutputStreamWriter podajesz zamiast System.out obiekt typu FileOutputStream.

a jak mozna zrobic zeby zamiast wyswietlania System.out ten polski strign szedl do pliku ?

ta... nawyk z C. sorry

Nieprawidłowe nazewnictwo klas. Niezgodne z konwencją przyjętą przez sun:
http://java.sun.com/docs/codeconv/html/CodeConvTOC.doc.html