/ / W jaki sposób system POSIX obsługuje Unicode? - c, api, unicode, posix

W jaki sposób system POSIX obsługuje Unicode? - c, api, unicode, posix

Widziałem wiele systemów POSIX API, na przykład Linux & Mac i Android, które akceptują const char* jako argument dla ścieżki pliku.

Jednym z przykładów jest dlopen, jak pokazuje dokument, pierwszym argumentem jest const char*, więc czy obsługuje ścieżkę pliku w Unicode, na przykład ścieżkę z chińskim?

Odpowiedzi:

2 dla odpowiedzi № 1

Zakłada się, że we współczesnych systemach Linux / Unix nazwy plików w Unicode są wyrażone w ustawieniach bajtowych w utf-8 (chociaż niektóre z bazowych plików przechowują wewnętrznie nazwy plików w UTF-16).


3 dla odpowiedzi № 2

POSIX nie jest wymagany do obsługi nazw plików w Unicode. (Widzieć: https://stackoverflow.com/a/2306003/481267) Jednak pod warunkiem, że są zakodowane w utf-8, nie ma technicznych przeszkód do obsługi Unicode. Wiele nowoczesnych systemów plików zezwala na użycie dowolnego znaku w nazwie pliku i /.

Interfejs POSIX API obsługuje bajty zakończone znakiem NULsekwencje, a gdy łańcuch jest kodowany w utf-8, żadna reprezentacja punktu kodowego nie zawiera bajtu zerowego. Ponadto wszystkie znaki spoza zakresu ASCII (0x00-0x7f) są kodowane w całości przy użyciu bajtów z ustawionym bitem o wysokim porządku (0x80 -0xff), więc nie ma szans, że system pomyli się, myśląc, że istnieje separator katalogu w środku jakiegoś znaku Unicode.