Jak zmienić kodowanie znaków tekstu? I czy zawsze jest to możliwe?

Aby zmienić kodowanie z jednego na drugie należy najpierw odczytać tekst przy pomocy kodowania źródłowego i później zapisać z kodowaniem docelowym. Czyli trzeba zamienić numerki z jednego kodowania na odpowiedniki z drugiego kodowania (bo na końcu znaki są zapisywane za pomocą liczb). Tyle teorii.

Krok po kroku

Załóżmy, że mamy następujący tekst:

Damian

I załóżmy, że mamy go zapisanego w kodowaniu UTF-16, czyli reprezentacja liczbowa (w systemie decymalnym) będzie następująca (https://asecuritysite.com/coding/asc2):

68, 0, 97, 0, 109, 0, 105, 0, 97, 0, 110

To teraz należy tylko znaleźć odpowiedniki w docelowym kodowaniu (https://www.utf8-chartable.de/). Załóżmy, że chcemy dokonać konwersji na UTF-8. Tak więc finalnie dostaniemy:

68, 97, 109, 105, 97, 110

Zamiana kodowania z UTF-16 na UTF-8 jest dosyć prosta w większości przypadków (w powyższym przykładzie wystarczy usunąć dodatkowy bit – zero – wykorzystywany przy kodowaniu UTF-16).

Przykład w Javie

import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        byte[] utf16bytes = "Damian".getBytes(StandardCharsets.UTF_16LE);
        System.out.println(Arrays.toString(utf16bytes));
        String text = new String(utf16bytes, StandardCharsets.UTF_16LE);
        byte[] utf8bytes = text.getBytes(StandardCharsets.UTF_8);
        System.out.println(Arrays.toString(utf8bytes));
    }
}

Czy zawsze możliwa jest konwersja?

Niektóre kodowania nie obejmują pewnych znaków, stąd nie zawsze możliwa jest konwersja do innego kodowania. Generalnie nie powinno być nigdy problemu z przejściem z kodowania mniejszego X, do kodowania Y zawierającego w sobie kodowanie X oraz dodatkowe znaki. Dobrym przykładem jest tutaj przejście z UTF-8 do UTF-16:

Pozostaw komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *