Kodowanie domyślne plików txt w różnych systemach

2014-10-07 10:40

Rejestracja: 6 lat temu

Ostatnio: 2 tygodnie temu

0

Niedawno przerzuciłem się z C# na Java i chcę go wypróbować. Mój program jest napisany z myślą o Linuksie i Windowsie żeby działał na obu platformach. Program potrzebuje wczytać plik tekstowy. Problem tkwi w tym że Notatniki Linuksa przeważnie domyślnie zapisują pliki tekstowe z kodowaniem UTF8 natomiast Windowsa w ANSI(Cp1252). No i program po wczytaniu, przy polskich znakach zostawia krzaki. Wiem że można łatwo zapisać plik w nowym kodowaniu. Ale chcę aby program był maksymalnie prosty dla użytkowników. Czy jest możliwość sprawdzania kodowania pliku przed wczytaniem pliku i odpowiedniego ustawienia kodowania? Ale z tego co wyczytałem nie da się odpowiednio chyba sprawdzić jakie jest kodowanie. To po systemie rozpoznawać rodzaj kodowania?

File file = new File(sciezka);
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(sciezka), "UTF8")); 

Pozostało 580 znaków

2014-10-11 15:59

Rejestracja: 6 lat temu

Ostatnio: 1 rok temu

1

sprawdz sobie pierwsze 3 bajty

user image

utf8 z notatnika ma EF BB BF
ansi ma odrazu tekst 1a2a3a


Trzeba było napisać, żeby po prostu sprawdził czy jest BOM czy nie ;) - furious programming 2014-10-11 16:31

Pozostało 580 znaków

2014-10-11 16:42

Rejestracja: 16 lat temu

Ostatnio: 3 minuty temu

1

Plik UTF-8 z Notatnika zawiera na początku BOM, ale pod Linuksem uważa się BOM za niekoszerny.

Pod Windowsem możesz założyć że jak jest BOM to jest to UTF-8 albo UTF-16 (zależnie od początkowych bajtów) a jak nie ma to ANSI (ale nie zakładaj że to jest zawsze 1250 tylko pobierz stronę kodową z systemu).

Problem może być z plikiem z Linuksa który będzie zapewne w UTF-8 ale bez BOM.
Ale to już musisz sprecyzować czy na takim scenariuszu ci zależy i co właściwie chcesz osiągnąć.

Możesz pod linuksem po prostu założyć że wszystko jest w UTF-8.

edytowany 2x, ostatnio: Azarien, 2014-10-11 16:46

Pozostało 580 znaków

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