Polskie znaki w pliku TXT

0

Witam... szukałem, ale info które znalazłem jakoś nie odpowiadają na mój problem, daltego zakłądam nowy temat...

mam plik TXT oczywiście z polskimi znakami.

FileReader fr = new FileReader("C:/plik.txt");
BufferedReader bf = new BufferedReader(fr);

String line = "";

while ((line = br.readLine()) != null)
{
jTextArea1.append(line + "\n");
}

ble ble ...

PROBELM - Nie wyświetla polskich znaków.
Co trzeba zrobić, ustawć, napisać żeby czytało i wyświetlało polskie znaki??

POMOCY !!! :)))

Z góry dzięki ))))

0

Jakby znaki były zapisane w UTF-8 to byś je przeczytał a tak...nie ma ich:)
Już chyba wiesz co masz zrobić? Znajac życie masz tego txt zapisanego w windows 1250.

A co do aitomatycznego rozpoznawania strony kodowej to jest to gruby temat i algorytmy mimo swej zajebistosci i tak są zawodne dla małego n-liczby znaków więc od razu daj statyczny wybór strony kodowej.

0

FileReader domyslnie uzywa kodowania domyslnego, zakladam ze uzywasz windowsa a tam jest zdaje sie cp1252 czy cos. Z drugiej storny pewnie uzyles notepada i zpaisales plik, ktory zostal zapisany w utf-8. W kazdym razie, ewidentnie kodowanie ktorego uzywasz do wczytywania oraz kodowanie faktyczne pliku sie nie zgadzaja. Musisz zrobic co nastepuje:

  1. zapisac jeszcze raz ten plik tekstowy, tym razem zapamietujac jakie ma kodowanie
  2. jesli chcesz byc pewien ze progam bedzie dzialal u ciebie oraz innych z tym samym plikeim, nie mozesz zakldac ze zawsze dobre bedzie kodowanie domyslne systemu - jak mowilem, win ma jakiestam, a linux np utf-8. Zamiast FileReader zmien na:

Reader in = new InputStreamReader(new FileInputStream("plik.txt"), <tutaj kodowanie="kodowanie" ktore="ktore" ma="ma" plik="plik">);

Kodowanie mozesz podac za pomoca String, za pomoca Charset lub charset decoder. W opisie java.nio.charset.Charset w sekcji "Standard charsets" masz podane stringi ktore mozesz uzyc i miec pewnosc ze zawsze beda dobre. Z przyzwyczajenia i zgodnie z de-facto standardem uzywa sie najczesciej utf-8.

0

Możesz tworzyć plik (przy pisaniu w nim BufferedReaderem np) w UTF-8. Potem odczytywać go też w nim, powinien czytać polskie znaki.

Charset ch = Charset.forName("UTF-8");

//zapis lini do pliku z uwzględnieniem charsetu
BufferedWriter writer = new BufferedWriter(new FileWriter(sciezka));
String line = new String(("bla bla bla bla").getBytes(ch));
writer.write(line); 
writer.close();

//odczyt lini z pliku z uwzględnieniem charsetu
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(sciezka),ch));
reader.readLine();
reader.close();

edit: plik NIEzapisany w UTF-8, a odczytany w sposób powyżej również moze zwrócic krzaki. Plik powinien być już zapisany w UTF-8 (stworzony).

0

Dzieki Billy :))))

Śmiga :))

Ale dziwne jest, że jesli zapiszę plik txt w formacie UTF-8 to nie odczyta nic :(((
Dopiero jesli zapiszę do piku poprzez writer.write (format UTF-8) to odczyta zawartość pliku.

Ale to i lepiej. Od razu napiszę prostą aplikację do zapisu w pliku swoich danych :))

Dzięki :)))) Ogromne :)

0

OK, a teraz kolejny shodek :)

Jak dopisać dane to pliku txt ale na końcu pliku, nie ruszając wcześniejszych danych :)) ??

Czy trzeba skopiować całą zawartość dopisując nową ?? może jest cośżaby dopisąć na końcu :)))
??

Z góry dzięki :)))

0
BufferedWriter writer = new BufferedWriter(new FileWriter(sciezka,true));

otwiera do dopisywania

0
Bodek6 napisał(a)

Ale dziwne jest, że jesli zapiszę plik txt w formacie UTF-8 to nie odczyta nic :(((

Zalezy jak zapiszesz - poczytaj o BOM (Byte Order Mark), notepad domyslnie dodaje, moze to bylo problemem.

0

BOM nie jest dla UTF-8-jest pomijany bo ilośc bitów jest regularna. A nawet gdyby dodawać dla UTF-8 to i tak nie ma siły - musi się coś pokazać.

0

No chyba ze dekoder przerywa na pierwszym mozliwym bledzie. No ale nie ma co gdybac.

0

A co do tego czy BOM dla UTF8 ma sens (nie wiem czy o to Ci chodzilo, nie rozumiem do konca Twojej wypowiedzi) to jedna sprawa, a czy notatnik / notepad++ moze takie cos utworzyc to druga, wiec zanim cos napiszesz to sprawdz

0

OK, idziemy dalej :)))

W pliku "plik.txt" będzie tysiące danych.
Z tego będę musiał zrobić tablicę.

Jaka jest najszybsza funkcja która zapisuje do tablicy String[]? Czy zwykłe "=" jest dobre? czy istnieje coś innego - szybszego?

Z góry dzięki, Pozdrawiam :)

0

@::.

Nie ma różnicy BOM to tylko 3 bajty w kolejnosci - jak prog nie ma ustawionego czytania to będą to tylko 3 bajty na początku ciagu i tyle.
A jak nawet prog czyta i rozpoznaje to i tak pominie bo domyśłnie każdy prog ma ustawione czytanie bitów w regularny sposób a UTF-8 jak i US ASCII czy cp852 i inne mają przecięz regularne bity.

Chyba tylko UTF-16 i UTF-7 mają nieregularne (z tych częściej używanych).

0
lipkerson napisał(a)

@::.
A jak nawet prog czyta i rozpoznaje to i tak pominie bo domyśłnie każdy prog ma ustawione czytanie bitów w regularny sposób a UTF-8 jak i US ASCII czy cp852 i inne mają przecięz regularne bity.

Yhm, kazdy program. No fajnie ze taka masz pewnosc, zyjesz w idealnym swiecie. Albo jestes niedoinformowany.
Nie wiem co znaczy 'regularne bity'.
Ja znam dekodery UTF-8 ktore sie wywalaja na pierwszym napotkanym bledzie, a BOM nie jest poprawnym ciagiem dla UTF-8, wiec wywali sie zaraz na poczatku.
Za Wiki:
http://en.wikipedia.org/wiki/Byte_order_mark#UTF-8
zatem sa problemu z BOM.

Ale masz racje, BOM nic nie psuje. I tym chcialbym zakonczyc ta rozmowe bo nie prowadzi ona do niczego, a na pewno jest off-topem. Poskarze sie Koziolkowi i usunie, a jeszcze dostaniemy bany ;d

0

@Bodek6, znasz z góry ilość wierszy w pliku "plik.txt"? Jeśli nie, to będziesz czytał plik dwa razy, wpierw by ustalić jego rozmiar i zadeklarować odpowiednio dużą tablicę String[], a potem by ją wypełnić. Rozważ użycie kolekcji, np. ArrayList<String>, wtedy czytasz raz.

0

Dzieki wielkie :))

Z tablicą sobie poradziłem ale tak na swój sposób. Przyglądnę się koleksji ArrayList ale to w wolnym czasie :)))

Jest jakaś możliwość aby program dobierał siędo spakowanych plików??

Chodzi plik txt który zajmuje około 0,5 Mb długo będzie się ściągał aby pobrać z niego dane....
Jeśliby go spakować to będzie super, ale czy jest możliwość dobrania się wtedy do niego :))) ????
Z góry dzięki :))

0

Dzieki wielkie :))

Z tablicą sobie poradziłem ale tak na swój sposób. Przyglądnę się koleksji ArrayList ale to w wolnym czasie :)))

Jest jakaś możliwość aby program dobierał siędo spakowanych plików??

Chodzi plik txt który zajmuje około 0,5 Mb długo będzie się ściągał aby pobrać z niego dane....
Jeśliby go spakować to będzie super, ale czy jest możliwość dobrania się wtedy do niego :))) ????
Z góry dzięki :))

0

Da sie. Np moze byc spakowany zipem i wtedy strumien pliku musisz opakowac w ZipInputStream i rozpakowywanie bedzie robioe z automatu.

0

No dzięki :)) Jak będzie chwila wolnego to obczaje :)))

ZipInputStream :)) Sama nazwa mówi za siebie :))))

Dam znać jak poszły próby :)))

Dzięki ogromne :)))))
Pozdrawiam :))

0

OK, ZipInputStream działa...

Ale jak można dobrać się do plików w środku, tak, żeby spakowany plik rozpakować do FileInpuStream??

Z góry dzięki, Pozdrawiam :)))

0

Kompletnie nie rozumiem o co tym razem chodzi.

0

No chodzi mi o to, żeby rozpakowując ZIP'a nie wypakowywał plików na dysk tylko żeby przekazać je do FileInputStream...

0

FileInputStream to klasa ktora czyta z dusku, zatem jesli koniecznie chcesz tej klasy uzywac, to nie masz innego wyboru jak zapisac cos na dysk. To raz.
Dwa - przeciez ZipInputStream mametode read() ktora zwraca int / byte[], czego jeszcze potrzeba?
Mowisz ze ZIP rozpakowuje na dysk - jakim cudem?

0

Kuurde, jest problem...

Używam kodowanie UTF-8 ale nie działają szystkie polskie znaki...

Ł i Ń nie ma... Małe ł i ń jest, ale dużej litery nie koduje :((((

Co robić?? Ktoścoś wie??

Potrzebuje pomocy ....

Dzięki z Góry
Pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1