Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> readdir и юникод 
:(
    Опции темы
Sergiy83
Дата 20.12.2014, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 20.12.2014

Репутация: нет
Всего: нет



Всем привет.   Функция  readdir  заполняет структуру  dirent
struct dirent *dp;
dp=readdir(...);
Если в директории есть файлы с русскими символами в их именах, то в поле dp->d_name я получаю их в юникоде, а мне надо в ASCII.
Что делать, куда рыть? Конвертить потом как нибудь, или может есть более правильное решение.
PM MAIL   Вверх
tzirechnoy
Дата 22.12.2014, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



0) Ты получаешь их не в юникоде, а в текущей системной кодировке. Ну, чаще всего.

Узнать её -- nl_langinfo(CODESET) после setlocale(LC_ALL, "").

1) Учитывая, что в ascii есть только латинские символы (ну, ещё знаки препинания, управляющие символы и арабские цыфры) -- для преборазования в ascii тебе потребуется транслитерацыя. Учитывая, что обе системные библиотеки работы с кодировками (iconv и librecode)  транслитерацыю не поддержывают -- искать тебе в любом случае что-то на стороне.

Ну и да, учитывай, что имя файла можэт быть любым набором байт, кроме пары служэбных -- так что оно можэт и не быть словом в текущей системной кодировке. Или вообще не быть словом ни в какой кодировке.


PM MAIL   Вверх
Sergiy83
Дата 23.12.2014, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 20.12.2014

Репутация: нет
Всего: нет



Спасибо за участие. Кое как, косвенно но я решил проблему.
В моем проекте файловая система не критична поэтому я сменил её на FAT32. Смонтировал её с опцией iocharset=cp1251. 
Так как писать на нее будет у меня будет только samba в настройках последней указал unix charset = CP1251.
И все стало замечательно без конвертирования.
PM MAIL   Вверх
tzirechnoy
Дата 23.12.2014, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1173
Регистрация: 30.1.2009

Репутация: 3
Всего: 16



А почему бы не смонтировать с опцыей iocharset=utf8 и указать самбе unix charset=utf8? Что именно поменяется?

А то вот я, уж на что нелюблю юникод, но вот честно, samba с unix charset=koi8-r ужэ как-то меня достаёт. Ну, в смысле, присылают какие-нибудь статьи всякие европейцы и как-то сразу возникает геморрой с сохранением. Дажэ подумываю сделать общие папки всё-таки в utf8.

PS Да, для перекодирования чарсетов на лету есть convmvfs. Да, она тормозит, при чтении из кэша, поскольку никто её особенно не оптимизировал. Но fat32 в общем тожэ не летает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0450 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.