Jak w javie rozpoznać/ zapisać string w kodowaniu UTF-8.

0

Dzień dobry.
Jak w temacie. Może ktoś podpowie jak zapisać i rozpoznać czy String jest w UTF-8?

   package java.lang;

     public String(int[] codePoints, int offset, int count) {......
     
   public int hashCode() {
        int h = hash;
        if (h == 0 && !hashIsZero) {
            h = isLatin1() ? StringLatin1.hashCode(value)
                           : StringUTF16.hashCode(value);
            if (h == 0) {
                hashIsZero = true;
            } else {
                hash = h;
            }
        }
        return h;
    }

Jakaś podpowiedź co do konwersji z i na też by się przydała. Google mi wyrzuca akurat przykłady w innych językach programowania.

4

String wewnętrznie w javie nie jest w utf-8. Aktualnie jest to compact string kodowany zmiennie utf-16/latin-1.
Nie jest w ogólnym przypadku w encodowaniu źródła z którego został utworzony.

Tworząc stringa musisz podać z jakiego kodowania go tworzysz, zapisując także podajesz do jakiego kodowania. (Domyślnie kodowanie platformy czyli UTF-8).

0

dzięki za podpowiedź.

2
Integers napisał(a):

dzięki za podpowiedź.

Za wcześnie dziękujesz.
Musisz zrozumieć istotę.

String w Javie, obiekt klasy String, jak pisze @opiszon jest zawsze w prawidłowym kodowaniu, przyjmijmy że traktujemy jako "black box"
To jest zupełnie odmienne od zwyczajów C /C++ /Delphi gdzie importujemy do obiektów RAM wszelki syf, a potem się martwimy (Przy okazji to języki, które rosły w myśleniu znak = bajt, jak wniknąć to wychowywało ludzi do głębokich problemów, potem była mniej czy bardziej udana próba skorygować (unikodoowe Delphi straciło z 50-60% projektów, które były znakowo-bajtowym spagetti))

W Javie nigdy nie było że char =byte, od zawsze literka była samodzielną abstrakcją

W ekosystemie Javy można rozmawiać o formacie w jakich teksty / stringi są zapisane w zasobach zewnętzrnych, plikch, buforach sieciowych, buforach sterowanika bazy danych itd,
A konwersje stamtąd nie tylko usilnie proszą, ale nawet lekko przymuszają aby wybrać konkretne kodowanie. Jeden z wielu takich punktów:
https://docs.oracle.com/javase/8/docs/api/java/io/InputStreamReader.html

Nie ma jakiegoś kodowania? Żaden problem. Za dawnych czasów wielu polskich programistów implementowało Charset z polskim de-facto standardem Mazovia, jest to zestandaryzowane i zupełnie bezpiecznie się tworzy.

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