Properties problem z wczytywaniem kluczy z polskimi znakami

Properties problem z wczytywaniem kluczy z polskimi znakami
AW
  • Rejestracja:około 6 lat
  • Ostatnio:prawie 6 lat
  • Postów:1
0

Witam,
Wczytuję wartości z kluczy z pliku z rozszerzeniem properties w taki sposób:

Kopiuj
	{
	Properties properties = new Properties();
    FileInputStream in = new FileInputStream("my.properites");
	properties.load(in);
    String nazwaGry = properties.getProperty("nazwaGry");
    String liczbaPoziomów = properties.getProperty("liczbaPoziomów=4");
    String nazwaBazowaPlikuZOpisemPoziomu = properties.getProperty("nazwaBazowaPlikuZOpisemPoziomu");
    String numeracjaPoziomówZaczynaSięOd = properties.getProperty("numeracjaPoziomówZaczynaSięOd");
    String rozszerzeniePlikuZOpisemPoziomu = properties.getProperty("rozszerzeniePlikuZOpisemPoziomu");
    String liczbaStopniTrudności = properties.getProperty("liczbaStopniTrudności");
    String zmianaStopniaTrudności = properties.getProperty("zmianaStopniaTrudności");
    String początkowaSzerokośćPlanszy = properties.getProperty("początkowaSzerokośćPlanszy");
    String początkowaWysokośćPlanszy = properties.getProperty("początkowaWysokośćPlanszy");
    String początkowaSzerokośćObiektuGryJakoProcentPoczątkowejSzerokościPlanszy = properties.getProperty("początkowaSzerokośćObiektuGryJakoProcentPoczątkowejSzerokościPlanszy");
    String tło = properties.getProperty("tło");
	String klorTła = properties.getProperty("klorTła");
    String obiektyGry = properties.getProperty("obiektyGry");
    String plikObiektu = properties.getProperty("plikObiektu");
	System.out.println(klorTła);
	}

Gdy chcę odczytać wartość zmiennej np. liczbaStopniTrudności, klorTła to zwracany jest null
Gdy odczytuję wartość zmiennej np. nazwaGry, liczbaPoziomów to wszystko jest w porządku
Zauważyłem że null jest przy kluczach, gdy w ich nazwach jest np. litera ł lub ś
Co zrobić żeby nie zwracało null przy tych kluczach?

Zobacz pozostały 1 komentarz
au7h
polskie znaki w nazwach zmiennych? :o
au7h
no i error: stray ‘\305’ in program, w c++ by to nie przeszło :P
au7h
nie mniej jednak wygląda to niecodziennie
K5
  • Rejestracja:około 6 lat
  • Ostatnio:około 6 godzin
  • Postów:1002
0

Poza polskimi znakami w zmiennych popraw jeszcze to:

String liczbaPoziomów = properties.getProperty("liczbaPoziomów=4");

Jako klucz wpisujesz tylko to co jest po lewej stronie znaku =.

Dodatkowo upewnij się czy po stworzeniu inputStreama oraz załadowaniu tego do propertisów wszystko jest prawidłowo. (debugger)

AW
Poprawiłem błąd. Tak, wszystko jest prawidłowo
jarekr000000
  • Rejestracja:ponad 8 lat
  • Ostatnio:około 9 godzin
  • Lokalizacja:U krasnoludów - pod górą
  • Postów:4709
3
Antoni Winnicki napisał(a):

Co zrobić żeby nie zwracało null przy tych kluczach?

Nie używac polskich znaków w properties.

Do Javy 8 włącznie - pliki properties mogły być kodowane tylko w ISO-8859-1, przy czym były wspierane znaczniki \uABCD na znaki spoza tego znaku. (Wygląda to debilnie).
https://en.wikipedia.org/wiki/.properties
Od javy 9 możesz pliki properties zapisać w UTF-8. Czyli upewnij się co do wersji Javy, a potem sprawdź jak kodujesz plik properties.

Przy okazji problem dotyczy nie tylko klucza, ale i wartości.

Do javy 8 na pewno był też tool native2ascii który robił escapowanie znaków spoza ISO-8859-1.

Co do komentarzy powyżej. Pisanie po polsku w javie wygląda może koślawo, ale jak ktoś już to robi, to jak najbardziej może w kodzie używać polskich znaków, ruskich też. Dotyczy to nazw zmiennych, nazw klas, metod, itd.


jeden i pół terabajta powinno wystarczyć każdemu
edytowany 7x, ostatnio: jarekr000000
AW
Dzięki ;) O taką odpowiedź chodziło!

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.