![]() |
|
Модераторы: xvr |
![]()
|
|
| Sergiy83 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 20.12.2014 Репутация: нет Всего: нет |
Всем привет. Функция readdir заполняет структуру dirent
struct dirent *dp; dp=readdir(...); Если в директории есть файлы с русскими символами в их именах, то в поле dp->d_name я получаю их в юникоде, а мне надо в ASCII. Что делать, куда рыть? Конвертить потом как нибудь, или может есть более правильное решение. |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
0) Ты получаешь их не в юникоде, а в текущей системной кодировке. Ну, чаще всего.
Узнать её -- nl_langinfo(CODESET) после setlocale(LC_ALL, ""). 1) Учитывая, что в ascii есть только латинские символы (ну, ещё знаки препинания, управляющие символы и арабские цыфры) -- для преборазования в ascii тебе потребуется транслитерацыя. Учитывая, что обе системные библиотеки работы с кодировками (iconv и librecode) транслитерацыю не поддержывают -- искать тебе в любом случае что-то на стороне. Ну и да, учитывай, что имя файла можэт быть любым набором байт, кроме пары служэбных -- так что оно можэт и не быть словом в текущей системной кодировке. Или вообще не быть словом ни в какой кодировке. |
|||
|
||||
| Sergiy83 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 20.12.2014 Репутация: нет Всего: нет |
Спасибо за участие. Кое как, косвенно но я решил проблему.
В моем проекте файловая система не критична поэтому я сменил её на FAT32. Смонтировал её с опцией iocharset=cp1251. Так как писать на нее будет у меня будет только samba в настройках последней указал unix charset = CP1251. И все стало замечательно без конвертирования. |
|||
|
||||
| tzirechnoy |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1173 Регистрация: 30.1.2009 Репутация: 3 Всего: 16 |
А почему бы не смонтировать с опцыей iocharset=utf8 и указать самбе unix charset=utf8? Что именно поменяется?
А то вот я, уж на что нелюблю юникод, но вот честно, samba с unix charset=koi8-r ужэ как-то меня достаёт. Ну, в смысле, присылают какие-нибудь статьи всякие европейцы и как-то сразу возникает геморрой с сохранением. Дажэ подумываю сделать общие папки всё-таки в utf8. PS Да, для перекодирования чарсетов на лету есть convmvfs. Да, она тормозит, при чтении из кэша, поскольку никто её особенно не оптимизировал. Но fat32 в общем тожэ не летает. |
|||
|
||||
![]()
|
| Правила форума "С/С++: Программирование под Unix/Linux" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |