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

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")); 
1

sprawdz sobie pierwsze 3 bajty

user image

utf8 z notatnika ma EF BB BF
ansi ma Od razu tekst 1a2a3a

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.

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