Вы здесь

Как прочесть DVD где русские символы в 1251 когда у меня локаль в UTF-8?

Вот такая проблема.. Дали двд, там кодировка 1251, русские символы. У меня система в ютфе-8 - не позволяет даже заходить в такие папки. Кто-нибудь знает выход из этой проблемы?

как монтируем?

ааа.. там ведь кодировку указать можно?..

localhost ~ # cat /etc/fstab | grep cdrom
/dev/cdrom		/media/cdrom	auto		noauto,ro	0 0
localhost ~ # 

mount -o iocharset=cp1251 /dev/cdrom

только в ядре должна быть вкомпилена эта NLS

Спасибо большое!

Только чего-то оно не прокатывает :)

localhost ~ # mount -o iocharset=cp1251 /dev/cdrom
localhost ~ # ls -la /media/cdrom
итого 222
dr-xr-xr-x 67 root root 10240 Окт 10  2008 .
drwxr-xr-x  4 root root   168 Фев  4 17:09 ..
dr-xr-xr-x  2 root root  2048 Окт 10  2008 ????
dr-xr-xr-x  2 root root  2048 Окт 10  2008 ???????? ???????

localhost ~ # cat /usr/src/linux/.config | egrep 'NLS.*1251'
CONFIG_NLS_CODEPAGE_1251=y
localhost ~ # 

И не ругается на команду, и поддержка в ядре есть..

какая файловая система ? UDF или iso ?

—

Compute:
Bosch M2.8.1 -> custom Bosch M2.8.3 clone from Russia.
Speed about 260 km,Ram 2 pers.,HDD - 70 kg,210 FLOPS ;)

а в /etc/locale.gen cp1251 указывать разве не надо?

попробуй поиграться с опциями
iocharset=cp1251
nls=cp1251

man mount

кстати если знаки вопроса вместо русских букв это очень похоже на то что консоль не русифицирована

Спасибо, попробую потестить эти опции!

Консоль..? Да вроде русифицирована (utf-8):

localhost ~ # cat привет.txt 
фывафыва

localhost ~ # ls -la
-rw-r--r--  1 root root    17 Фев  4 20:43 привет.txt

Задам возможно странный вопрос а в винде этот диск норм читается? а то может там оно так и записано ????) просто предположение.

Не знаю, но скажу вот что: на другой системе в Дженту (консоль 1251) - он читается с русскими буквами отлично.
А винды чё-та нема просто...

Это я предусмотрел уже давно :)

# cat /etc/locale.gen
ru_RU.UTF-8 UTF-8
en_US.UTF-8 UTF-8
ru_RU.CP1251 CP1251

Вернее совсем не так.

marlenus написал:
mount -o iocharset=cp1251 /dev/cdrom
только в ядре должна быть вкомпилена эта NLS

Монтировать надо с опциями codepage=866 и iocharset=utf8

—

_________________________________________________________
Прежде чем задать вопрос, подумай, сможешь ли ты понять ответ.

+1

voleyr написал:
Вернее совсем не так.

marlenus написал:
mount -o iocharset=cp1251 /dev/cdrom
только в ядре должна быть вкомпилена эта NLS

Монтировать надо с опциями codepage=866 и iocharset=utf8

По моему опыту опция codepage лишняя, достаточно iocharset с указанием на текущую локаль (которая, сюрприз, не у всех utf8).

Правда, дисков без RockRidge (это к тому, что дело не (с)только в кодировках) я давненько не монтировал...

—

:wq
--
Live free or die

Anarchist написал:
По моему опыту опция codepage лишняя, достаточно iocharset с указанием на текущую локаль...

Я указал классический подход, который должен сработать в любом случае.

Цитата:
... (которая, сюрприз, не у всех utf8).

Читаем тему топика, первый пост топикстартера и не строим предположений.

—

_________________________________________________________
Прежде чем задать вопрос, подумай, сможешь ли ты понять ответ.

voleyr написал:
Anarchist написал:
По моему опыту опция codepage лишняя, достаточно iocharset с указанием на текущую локаль...

Я указал классический подход, который должен сработать в любом случае.

Ключевое слово "должен".
Когда я некоторое время назад сталкивался с полностью аналогичной проблемой, этот подход [уже] не работал.

—

:wq
--
Live free or die

localhost ~ # mount -o iocharset=utf8 /dev/cdrom /media/cdrom
mount: блочное устройство /dev/sr0 защищен от записи, монтируется только для чтения
localhost ~ # тоже вопросы...

Кстати, а поддержка 866 должна быть вкомпилена в ядре?

localhost ~ # mount -o iocharset=utf8,codepage=cp866 /dev/cdrom /media/cdrom
mount: блочное устройство /dev/sr0 защищен от записи, монтируется только для чтения
mount: wrong fs type, bad option, bad superblock on /dev/sr0,
       missing codepage or helper program, or other error
       В некоторых случаях полезная информация может быть
       найдена в syslog - попробуйте dmesg | tail или что-то
       в этом роде

localhost ~ # mount -o iocharset=utf8,codepage=866 /dev/cdrom /media/cdrom
....аналогично...

localhost ~ # locale
LANG=ru_RU.UTF-8
LC_CTYPE="ru_RU.UTF-8"
LC_NUMERIC="ru_RU.UTF-8"
LC_TIME="ru_RU.UTF-8"
LC_COLLATE="ru_RU.UTF-8"
LC_MONETARY="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"
LC_PAPER="ru_RU.UTF-8"
LC_NAME="ru_RU.UTF-8"
LC_ADDRESS="ru_RU.UTF-8"
LC_TELEPHONE="ru_RU.UTF-8"
LC_MEASUREMENT="ru_RU.UTF-8"
LC_IDENTIFICATION="ru_RU.UTF-8"
LC_ALL=

а то её у меня нет :)

WXP написал:
Кстати, а поддержка 866 должна быть вкомпилена в ядре?...а то её у меня нет :)

А как Вы думаете? :)

—

_________________________________________________________
Прежде чем задать вопрос, подумай, сможешь ли ты понять ответ.

ну тут вроде говорили что опция codepage лишняя :) а 1251 у меня вкомпилена..

Кстати, почему-то оно ругается на 866...

localhost ~ # mount -o loop,iocharset=utf8,codepage=cp866 /dev/cdrom/ /media/cdrom
mount: wrong fs type, bad option, bad superblock on /dev/loop/0,
       missing codepage or helper program, or other error
       В некоторых случаях полезная информация может быть
       найдена в syslog - попробуйте dmesg | tail или что-то
       в этом роде

localhost ~ # mount -o loop,iocharset=utf8,codepage=866 /dev/cdrom/ /media/cdrom
mount: wrong fs type, bad option, bad superblock on /dev/loop/0,
       missing codepage or helper program, or other error
       В некоторых случаях полезная информация может быть
       найдена в syslog - попробуйте dmesg | tail или что-то
       в этом роде

localhost ~ # cat /usr/src/linux/.config | egrep 'NLS.*866'
CONFIG_NLS_CODEPAGE_866=y

В dmesg ничего не выписывает. Без опции codepage - маунтится.

чего тут подумал а может в обциях монтирования еще codepage указать какую-нить типа cp866

Но сначала скачать содержимое, раскодировать кривые имена файлов enconv-ом и есть уже готовые скрипты по раскодированию и рекурсивному копированию целых директорий (например, eix app-text/convmv). И больше кривых дисков не создавать, даже в венде все резалки соблюдают стандарты.

Как же я скачаю, если у меня оно даже не копирует такие имена :)

Создавался диск в K3B под Дженту с локалью 1251.. (никаких настроек не изменялось в k3b).

sudo emerge -va convmv
mkdir /home/wxp/newdvd
cd /mnt/cdrom && \
convmv -r --notest -f cp1251 -t utf8 /home/wxp/newdvd

Возможно сначала смонтировать с iocharset=cp1251 и далее смотреть dmesg|tail.
Ещё могу поискать свой старый скрипт, решавший аналогичную задачу.
Он использовал enconv. А вообще ссылки все выше.

Вы начните с того, что сначала определите, в какой точно кодировке эти имена файлов сейчас. Для этого смонтируйте DVD безо всяких доп. опций и просто посмотрите вывод:

ls /mnt/cdrom | enca

Интересная вещь..

localhost ~ # mount -o loop /dev/cdrom /media/cdrom
localhost ~ # ls /media/cdrom | enca
KOI8-R Cyrillic
  LF line terminators
localhost ~ # mount -o iocharset=koi8-r /dev/cdrom/ /media/cdrom
dr-xr-xr-x  2 root root  2048 Окт 10  2008 ????                                    
dr-xr-xr-x  2 root root  6144 Окт 10  2008 ??????

iocharset - это кодовая страница той системы, к которой производится монтирование! У Вас локаль другая.

Прочитали бы уже man mount за это время, пока жив топик, его уже можно было перевести со словарём.

ls /media/cdrom | iconv -f koi8-r

# Если всё ОК:
umount /media/cdrom
mount -o iocharset=koi8-r /dev/cdrom/ /media/cdrom
mkdir -p /home/wxp/newdvd
cp -LR /media/cdrom/* /home/wxp/newdvd/
cd /home/wxp/newdvd
convmv -f koi8-r -t utf8 ./

# Если всё ОК:
convmv -r --notest -f koi8-r -t utf8 ./