Wie konvertiere ich const char* sicher in const char8_t* in C++20?

Post a reply

Smilies
:) :( :oops: :chelo: :roll: :wink: :muza: :sorry: :angel: :read: *x) :clever:
View more smilies

BBCode is ON
[img] is ON
[flash] is OFF
[url] is ON
Smilies are ON

Topic review
   

Expand view Topic review: Wie konvertiere ich const char* sicher in const char8_t* in C++20?

by Anonymous » 06 Jan 2025, 04:58

Aus dieser Antwort habe ich gelernt, dass wir in C++17 std::fstream mit einem UTF-8-Pfad über std::filesystem::u8path öffnen können. Aber in C++20 ist diese Funktion veraltet und wir sollten stattdessen const char8_t* an den Konstruktor std::filesystem::path übergeben.

Hier kommt das Problem: Obwohl wir (über reinterpret_cast) jeden Zeiger legal auf const char* konvertieren können, können wir dies nicht rückwärts tun: von const char* nach z.B. const char8_t* (es würde gegen strenge Aliasing-Regeln verstoßen). Wenn wir also über eine externe API verfügen, die eine char-basierte UTF-8-Darstellung des Dateinamens zurückgibt (z. B. aus einer in C geschriebenen Bibliothek), können wir den Zeiger nicht sicher in eine char8_t-basierte Darstellung konvertieren .

Wie sollen wir also eine solche char-basierte Ansicht von UTF-8-Strings in eine char8_t-basierte Ansicht davon konvertieren?

Top