Problem z kodowaniem przy zapisywaniu losowych znaków w pliku tekstowym.

0

Dobry wieczór!

Uczę się programować w języku Java.
Obecnie trafiłem na problem, z którym nie potrafię sobie poradzić, dlatego zwracam się do Was.

Napisałem kod, który powinien:

  • wygenerować tablicę pseudolosowych liczb całkowitych z zakresu od 0 do 255;
  • zapisać wartości z tablicy w pliku tekstowym jako znaki w kodowaniu ISO 8859-1.

Problem polega na tym, że raz na jakiś czas zostaje utworzony plik, który zamiast znaków we wspomnianym kodowaniu zawiera znaki wyglądające jak pismo chińskie.
Wygląda to tak, jak na poniższym obrazku (po lewej efekt jaki chcę uzyskać, po prawej to czego chcę uniknąć):

notepads.png

Nie mam dużej wiedzy na temat programowania, więc nie ustaliłem przyczyny problemu.
Próbowałem zapisywania w kodowaniu UTF-8 oraz sprawdzałem działanie programu na systemach Windows ze stronami kodowymi CP1250 i CP1252, problem występuje.
Najczęściej uzyskuję niepoprawną zawartość plików dla tablicy zawierającej 82, 224, 288 lub 20544 znaki.

Kod programu wygląda tak:

public class WriteArrayInTxt {

	public static void main(String[] args) {

		int numberOfCharacters = 224;

		int[] characters = new int[numberOfCharacters];

		for (int i = 0; i < numberOfCharacters; i++) {
			characters[i] = ThreadLocalRandom.current().nextInt(256);
		} // foreach

		String filePath = "D:\\Desktop\\myFile_" + numberOfCharacters + ".txt";

		try {
			BufferedWriter writer = Files.newBufferedWriter(Paths.get(filePath), StandardCharsets.ISO_8859_1);

			for (int character : characters) {
				writer.write(character);
			} // foreach

			writer.close();

		} catch (IOException exception) {
			exception.printStackTrace();
		} // try-catch

	}// main()

}// class WriteArrayInTxt
0

Nie używaj notatnika do oglądania pliku.

0

Bardzo dziękuję, działa, o tym nie pomyślałem. A dlaczego tak się dzieje, że w Notatniku jest "chińskie pismo", a w np. Wordzie są poprawne znaki?

0

Bo systemowy Notatnik jest ubogi i może nie obsługiwać tego kodowania – nie ta liga co Word.

0

Dziękuję za pomoc. Pozostaje mi się dokształcić w kwestii kodowania znaków. Życzę miłego dnia.

2

Uwaga na BOM !
https://pl.wikipedia.org/wiki/BOM_(informatyka)

Przypadkowo wygenerował Ci się BOM, a notatnik windows jest na tyle dobry, że to obsługuje.

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