И решиля создать файл cafe'.txt где апостроф это к e относится, т.е. французское название кафе. А файловая система у меня reiserfs, примонтированая без всяких опций кодировки. И в каком виде запишется это слово? А потом я перенес этот файл на другую систему, и у меня там есть файл cafе, где последняя буква e это русская прописная е. Или же тот анналог e' который после преобразования в 8битную строчку французского слова произойдет. И что, получится что у меня один файл затрет другой?
Плиз кто-нибудь набросайте тогда путь работы с локализованными файлами? Причем реально у меня может такая ситуация встречаться очень часто, т.е. когда много разных языков используются для поименования файлов. И причем
даже те которые не могут быть в ansi, а именно китайский и вьетнамский.
и правильно ли я понял что имена файлов записываются в фаловую систему в
текущей локали, т.е. если у меня utf-8 и записал слово cafe' то оно запишется в 5 байт. И потом если я читаю его под не utf-8 то увижу caf[билиберда из 2 букв], а если в utf-8 локали то все будет нормально? И как тогда мне перед открытием файлов конвертить имена туда и обратно??? Что бы нормально открывать такие вот утф8 файлы и сохранять их правильно без потери национальных символов?
Может я чего-то не понял, но open() и fopen() все равно какая локаль в данный момент установлена. Они получают указатель const char * на строку, которая должна заканчиваться нулем '\0' . UTF-8 гарантирует, что посередине строки не будет этого нулевого символа.
Тогда кто-нибудь может мне привести пример кода конвертирования wchar_t* строчки в char* строчку в utf-8, и обратно.
(Не то что я ленивый, но чтобы сэкономить время на рисерче))
Я думаю, что ты и сам все понял, но еще раз на всякий случай.
Имя файла с точки зрения API OS и с точки зрения файловой системы есть завершенный нулем набор байт и не более того. Тот факт, что некоторые наборы символов при их визуализации или другой обработке специально обученными тулзами могут преобразовываться во французское кофе, с файловой системой связан довольно слабо.
>правильно ли я понял что имена файлов записываются в фаловую систему в текущей локали, т.е. если у меня utf-8 и записал слово cafe' то оно запишется в 5 байт
Смотря какой смысл в это вкладывать. Если твой терминал сможет трансформировать французской кофе в utf-8, то дальше с этой строчкой никто, скорее всего, никаких специальных действий производить не будет.
>потом если я читаю его под не utf-8 то увижу caf[билиберда из 2 букв]
А что значит "читаю не под utf-8? Да, просматривая каталог, ты увидешь строку в utf-8. Смогут ли ее праильно отобразить - отдельный вопрос.
>Тогда кто-нибудь может мне привести пример кода конвертирования wchar_t* строчки в char* строчку в utf-8, и обратно. (Не то что я ленивый, но чтобы сэкономить время на рисерче))
Я же сразу написал. wcstombs. Только это не в UTF-8, а в текущую локаль, что лучше. (В начале программы не забыть setlocale(LC_ALL, ""); )