Java » Czyli często zadawane pytania

Polskie znaki

  • 2007-09-14 23:50
  • 4 komentarze
  • 3328 odsłon
  • Oceń ten tekst jako pierwszy
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 ;)

4 komentarze

Koziołek 2009-10-12 15:00

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

ArTaN 2008-10-18 02:27

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

czarownik 2007-09-10 14:06

ta... nawyk z C. sorry

Koziołek 2007-09-10 13:55

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