LINUX.ORG.RU

Нету такого. В линуксе имена файлов хранятся в 8-битной кодировке. Если нужно, то преобразовывай имена вручную через wcstombs.

Хотя почему таких врапперов не сделали в glibc - непонятно.

smartly ★★★
()
Ответ на: комментарий от smartly

хмм, так что, получается, если я не знаю в какой кодировке сохранено имя файла то хрен я его открою?

anonymous
()
Ответ на: комментарий от anonymous

Вообще - да. Ну еще можно предположить, что в кодировке текущей локали.

anonymous
()
Ответ на: комментарий от anonymous

2anonymous (*) (30.03.2005 1:26:55):

>хмм, так что, получается, если я не знаю в какой кодировке сохранено имя файла то хрен я его открою?

Чой-то, даже, сложнее...

А если ты, допустим, на дискетку файл сбросил -- все, не открыть? (ты ж локаль при этом на дискетку не спасаешь?)

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

> А если ты, допустим, на дискетку файл сбросил

Ну, по-хорошему, в mountе дискеты должно быть всё прописано...

С уважением -- Смоляное Чучелко

anonymous
()
Ответ на: комментарий от smartly

>Нету такого. В линуксе имена файлов хранятся в 8-битной кодировке.

Одна из таких кодировок - UTF8.

anonymous
()
Ответ на: комментарий от anonymous

так и как оно тогда хранится в utf-8 ?

у меня локаль utf 8 к примеру

И решиля создать файл cafe'.txt где апостроф это к e относится, т.е. французское название кафе. А файловая система у меня reiserfs, примонтированая без всяких опций кодировки. И в каком виде запишется это слово? А потом я перенес этот файл на другую систему, и у меня там есть файл cafе, где последняя буква e это русская прописная е. Или же тот анналог e' который после преобразования в 8битную строчку французского слова произойдет. И что, получится что у меня один файл затрет другой?

Плиз кто-нибудь набросайте тогда путь работы с локализованными файлами? Причем реально у меня может такая ситуация встречаться очень часто, т.е. когда много разных языков используются для поименования файлов. И причем даже те которые не могут быть в ansi, а именно китайский и вьетнамский.

anonymous
()
Ответ на: комментарий от anonymous

и правильно ли я понял что имена файлов записываются в фаловую систему в текущей локали, т.е. если у меня utf-8 и записал слово cafe' то оно запишется в 5 байт. И потом если я читаю его под не utf-8 то увижу caf[билиберда из 2 букв], а если в utf-8 локали то все будет нормально? И как тогда мне перед открытием файлов конвертить имена туда и обратно??? Что бы нормально открывать такие вот утф8 файлы и сохранять их правильно без потери национальных символов?

Заранее спасибо.

anonymous
()
Ответ на: комментарий от anonymous

Может я чего-то не понял, но open() и fopen() все равно какая локаль в данный момент установлена. Они получают указатель const char * на строку, которая должна заканчиваться нулем '\0' . UTF-8 гарантирует, что посередине строки не будет этого нулевого символа.

Dead ★★★★
()
Ответ на: комментарий от anonymous

пять и запишется. И считается. А как на терминале будет выглядеть, зависит от кодировки терминала и опций монтирования.

bugmaker ★★★★☆
()
Ответ на: комментарий от bugmaker

Тогда кто-нибудь может мне привести пример кода конвертирования wchar_t* строчки в char* строчку в utf-8, и обратно. (Не то что я ленивый, но чтобы сэкономить время на рисерче))

anonymous
()
Ответ на: комментарий от anonymous

кто-то может. примерно так:

#include <iconv.h>

wchar_t src [1024] = ...;
char dst [1024];
size_t il = скоко нужно, ol = 1024 /*скоко лезет*/;
char * ib = src;
char * ob = (char *) dst;
iconv_t ic = iconv_open ("UTF8", "WCHAR_T");
iconv (ic, &ib, &il, &ob, &ol);

voila! это из wchar_t в utf8. значения указателей ib, ob и il, оl в процессе преобразования меняются. man iconv короче.

bugmaker ★★★★☆
()
Ответ на: комментарий от anonymous

Я думаю, что ты и сам все понял, но еще раз на всякий случай.

Имя файла с точки зрения API OS и с точки зрения файловой системы есть завершенный нулем набор байт и не более того. Тот факт, что некоторые наборы символов при их визуализации или другой обработке специально обученными тулзами могут преобразовываться во французское кофе, с файловой системой связан довольно слабо.

>правильно ли я понял что имена файлов записываются в фаловую систему в текущей локали, т.е. если у меня utf-8 и записал слово cafe' то оно запишется в 5 байт

Смотря какой смысл в это вкладывать. Если твой терминал сможет трансформировать французской кофе в utf-8, то дальше с этой строчкой никто, скорее всего, никаких специальных действий производить не будет.

>потом если я читаю его под не utf-8 то увижу caf[билиберда из 2 букв]

А что значит "читаю не под utf-8? Да, просматривая каталог, ты увидешь строку в utf-8. Смогут ли ее праильно отобразить - отдельный вопрос.

anonymous
()
Ответ на: комментарий от anonymous

>Тогда кто-нибудь может мне привести пример кода конвертирования wchar_t* строчки в char* строчку в utf-8, и обратно. (Не то что я ленивый, но чтобы сэкономить время на рисерче))

Я же сразу написал. wcstombs. Только это не в UTF-8, а в текущую локаль, что лучше. (В начале программы не забыть setlocale(LC_ALL, ""); )

smartly ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.