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:

