W programie źródłowym Javy chcę umieścić string z polskimi znakami, np.
String s = "żółć";
Ale Java pracuje w Unicode. W jakim standardzie polskich znaków powinien być napisany program źródłowy, żeby przy kompilacji zostały wygenerowane właściwe znaki Unicodu ?
Wiem, że można zapisać znaki Unicode wprost, ale taki zapis jest znacznie mniej czytelny.
Moim zdaniem jak napiszesz tak jak masz to wszystko bedzie ok skoro to unicode. Probowales to kompilowac? U mnie dziala i nie musze nic przestawiac, wiec u Ciebie tez powinno.
Ali G napisał(a)
Moim zdaniem jak napiszesz tak jak masz to wszystko bedzie ok skoro to unicode. Probowales to kompilowac? U mnie dziala i nie musze nic przestawiac, wiec u Ciebie tez powinno.
Problem się pojawia jak niektóre polskie znaki próbujesz wpisać np. w JCreatorze :/ Czy można jakoś wyłączyć te skróty?
Skompilowałem taki programik (przerobiona recepturs 9.1 z "Java Receptury" Darwina)
import java.io.*;
// Polszczyzna pliku programu: Windows_CEE albo Cp1250)
/**
- Czytaj plik i wypisuj używając BufferedReader i System.out
/
public class Polski {
final String T1 = "cygańskie źrebię ma żółtą sierść";
final String T2 = "CYGAŃSKIE ŹREBIĘ MA ŻÓŁTĄ SIERŚĆ";
public static void main(String[] av) {
Polski c = new Polski();
if (av.length == 0)
c.process(new BufferedReader(
new InputStreamReader(System.in)));
else for (int i=0; i<av.length; i++)
try {
c.process(new BufferedReader(new FileReader(av[i])));
} catch (FileNotFoundException e) {
System.err.println(e);
}
}
Polski() {
System.out.println
("Polszczyzna pliku programu: Windows_CEE albo Cp1250");
System.out.println("Stałe tekstowe z programu:");
System.out.println(T1);
System.out.println(T2);
}
/* czytaj jedną linię */
public void process(BufferedReader is) {
try {
String inputLine;
while ((inputLine = is.readLine()) != null) {
System.out.println(inputLine);
}
is.close();
} catch (IOException e) {
System.out.println("IOException: " + e);
}
}
}
Ten programik wstukałem swoim edytorkiem, pracującym w trybie konsoli, który ma mozliwość wyboru różnych standardów polszczyzny. Identycznie byłoby gdyby poslużyć się Notepad'em, czy innym edytorem pracującym w GUI.
I oto jak wyglądały wyniki na konsoli:
Polszczyzna pliku programu: Windows_CEE albo Cp1250
Sta?e tekstowe z programu:
cyga˝skie črebiŕ ma ?ˇ?t? sierťŠ
CYGAĐSKIE ĆREBI? MA ?ËúTą SIERîĂ
Gdy wyniki przekierowalem do pliku, plik wyglądał w Notepadzie tak:
Polszczyzna pliku programu: Windows_CEE albo Cp1250
Stałe tekstowe z programu:
cygańskie źrebię ma żółtą sierść
CYGAŃSKIE ŹREBIĘ MA ŻÓŁTĄ SIERŚĆ
Wniosek stąd taki, że Java dostosowuje się do polszczyzny Windows GUI w pisaniu do plików. Ale polszczyzna KONSOLI jest inna. Moje pytanie jest więc właściwie inne: Co zrobić,żeby polskie teksty były przez Javę wypisywane poprawnie na konsolę ?
Bo przepisanie programu wg polszczyzny konsoli wszystkiego nie załatwia. Dostałem przy kompilacji ostrzeżenia:
PolskiKons.java:24: warning: unmappable character for encoding Cp1250
System.out.println("Sta?e tekstowe z programu:");
W konsekwencji polskie znaki wypisywane byly na konsolę poprawnie, ale z wyjatkiem liter "ł" i "ś", w miejsce ktorychwypisywane były znaki zapytania.
ja np zapisuję plik w Unicode (przez notatnik) i są wszystkie polski znaki stringów na konsoli.
Boleję, że JCreator ma tak wąską listę kodowań.
Jeśli chodzi o interpretację, porównywanie danych z innych źródeł niż string z kodu (z pliku, z sieci) to warto przetestować
PrintWriter o = new PrintWriter( new OutputStreamWriter(System.out,<nazwa kodowania="kodowania">), true);
Proszę o usunięcie mojej wcześniejszej wypowiedzi.
Ten kod sprawdziłem i działa:
PrintWriter p = new PrintWriter( new OutputStreamWriter(System.out,"Cp852"));
à propos zamiany polskich znaków na encje Unicode to należy używać programu z dystrybucji Javy o nazwie native2ascii.
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.