# Посоветуйте, плз, по UTF локали [solved]

## dish

юзаю p2p-клиенты: xMule, valknut. Не работает поиск файлов с русскими именами  :Sad: 

Сейчас локаль koi8.

Вопрос: переход на юникодовую локаль поможет? И будет ли машина после этого нормально работать с виндовыми шарами?

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

----------

## EdiG

незнаю на счет xMule, valknut но

 mldonkey через веб работает нормально с любой локалью

----------

## sa10

 *dish wrote:*   

>  переход на юникодовую локаль поможет? 

 

Если система будет более корректно настроена на UTF8, то поможет.

Но все, что может юникод, это отображение существенно большего количества символов, можно сразу писать на китайском, грузинском и русском. 

Если Вы поставите локаль в юникод, то не следует ожидать, что кои8 или 1251 станет видна без дополнительных телодвижений. 

Для этого система выполняет необходимые преобразования, а правила преобразования к системной локали описываются например в /etc/fstab (для монтируемых файловых систем), в /etc/samba/smb.conf для просмотра виндовых сеток и т.п.

----------

## dish

Спасибо! Буду переходить.

----------

## Ernillew

На самом деле переход на UTF-8 делается в несколько ударов по клаве  :Smile: 

И получаешь щастие  :Smile: 

----------

## YD

 *Ernillew wrote:*   

> На самом деле переход на UTF-8 делается в несколько ударов по клаве 
> 
> И получаешь щастие 

 В идеале, но не на практике.

----------

## hlroad

 *YD wrote:*   

>  *Ernillew wrote:*   На самом деле переход на UTF-8 делается в несколько ударов по клаве 
> 
> И получаешь щастие  В идеале, но не на практике.

 

И на практике тоже. По крайней мере с последними версиями пакетов.

----------

## YD

Если ты имеешь ввиду ~x86, то да. Но некоторые, хотя с виду работают правильно, на самом деле могут порой выдавать глюки, как неправильная длина строки. Бывает куча багов, которые просто не замечают или не думают, что трабла в wchar. Например если открыть код многих программ (особенно с истоками в 90ых), в большом количестве случяев авторы не используют свои typedef, а используют стандартные типы данных, что очень неудобно при модификации.

----------

## viy

Использование стандартных типов данных (для данной платформы) предпочтительней при условии, что данный тип работает корректно. typedef (а чаще #define'ы в связке с configure) используются как раз для "вынесения за скобки" операций над подобными типами.

В любом случае --- это вопрос поддержки софта в соответствии со стандартами.

----------

## dish

Перешел на Юникод. Пользовал это и это руководства.

Получил щастие в виде неработаеющего vim и nano  :Sad: 

А mc вообще корячит не по-детски....

Также ввод русского в терминале и консоли оставляет желать лучшего:

в терминале приходится два раза нажимать на клавишу, чтобы отобразилось правильно. Видимо, Eterm не умеет работать с многобайтовыми шрифтами

в screen все замечательно без дополнительных опций, только mc все равно не работает.

В консоли вообще черти что, козяблы какие-то......

Собственно, вопрос: а что делать с CONSOLETRANSLATION? И в нем ли дело?

Как-то я там этот момент не нашел  :Sad: 

----------

## Balancer

 *dish wrote:*   

> Получил щастие в виде неработаеющего vim и nano 
> 
> А mc вообще корячит не по-детски....

 

USE-флаги, надеюсь, все из первой ссылки прописал?

А что потом

```
emerge -puvD --newuse world
```

говорит?

Ну и, наконец, в CONSOLETRANSLATION ничего прописывать не нужно. Под терминалкой оно сразу работать будет, а для работы консоли нужно патчить /etc/init.d/consolefont как сказано в http://dev.gentoo.org/~sergey/unicode-guide.html Внимание! Патчить _только_ consolefont. Всё остальное сейчас итак работает.

```

--- /etc/init.d/consolefont.orig2004-06-27 19:22:42.000000000 +0300

+++ /etc/init.d/consolefont2004-06-27 19:49:31.000000000 +0300

@@ -65,15 +65,21 @@

 

 if [ "${retval}" -eq 0 ]

 then

+loc_switch="\033(K"

+if [ -n "${UTF8}" ] && [ "${UTF8}" == "yes" ]

+then

+loc_switch="\033%G"

+fi

+

 for x in $(seq 1 "${RC_TTY_NUMBER}")

 do

 # Using DEVFS ?

 if [ -e /dev/.devfsd ] || \

    [ -e /dev/.udev -a -d /dev/vc ]

 then

-echo -ne "\033(K" >/dev/vc/${x}

+echo -ne ${loc_switch} >/dev/vc/${x}

 else

-echo -ne "\033(K" >/dev/tty${x}

+echo -ne ${loc_switch} >/dev/tty${x}

 fi

 done

 fi

```

----------

## dish

Флаги все добавил.

emerge -uDpv --newuse world

```
[ebuild     UD] app-pda/synce-serial-0.7 [0.9.0] 0 kB 

[ebuild     UD] app-pda/synce-libsynce-0.8.9 [0.9.0] 0 kB 

[ebuild     UD] app-pda/synce-dccm-0.7 [0.9.0] 0 kB 

[ebuild   R   ] media-libs/xine-lib-1.0-r2  +X -aac -aalib +alsa (-altivec) +arts -cle266 -debug -directfb +dvd -dxr3 +esd -fbcon -ffmpeg -flac +gnome +i8x0 +ipv6 -libcaca -mng +nls -nvidia +opengl +oss +png +samba +sdl +speex* -theora -v4l -vidix +vorbis -win32codecs +xinerama +xv -xvmc 7,219 kB 

[ebuild   R   ] media-libs/sdl-sound-1.0.1-r1  -flac +mikmod +oggvorbis -physfs +speex* 995 kB 

[ebuild     UD] app-arch/unshield-0.2 [0.4] 0 kB 

[ebuild   R   ] media-sound/vorbis-tools-1.0.1  -debug -flac +nls +speex* 700 kB 

[ebuild   R   ] kde-base/kdemultimedia-3.3.2  +alsa +arts -audiofile -cdparanoia -debug +encode -flac -kdeenablefinal +oggvorbis +speex* +xine +xinerama 5,258 kB 

[ebuild     UD] app-pda/synce-librapi2-0.8.9 [0.9.0] 0 kB 

[ebuild     UD] app-pda/synce-gnomevfs-0.2 [0.9.0] 0 kB 

```

Создал файл baselayout_utf.patch и вставил в него твой патч. 

# patch -p0 < baselayout_utf.patch:

```
can't find file to patch at input line 3

Perhaps you used the wrong -p or --strip option?

The text leading up to this was:

--------------------------

|--- /etc/init.d/consolefont.orig2004-06-27 19:22:42.000000000 +0300

|+++ /etc/init.d/consolefont2004-06-27 19:49:31.000000000 +0300

--------------------------

File to patch: 
```

Я ему пытался руками указать /etc/init.d/consolefont, а он в ответ:

```
File to patch: /etc/init.d/consolefont

patching file /etc/init.d/consolefont

Hunk #1 FAILED at 65.

1 out of 1 hunk FAILED -- saving rejects to file /etc/init.d/consolefont.rej

```

Содержимое файла /etc/init.d/consolefont.rej:

```
***************

*** 65,79 ****

  

  if [ "${retval}" -eq 0 ]

  then

  for x in $(seq 1 "${RC_TTY_NUMBER}")

  do

  # Using DEVFS ?

  if [ -e /dev/.devfsd ] || \

     [ -e /dev/.udev -a -d /dev/vc ]

  then

- echo -ne "\033(K" >/dev/vc/${x}

  else

- echo -ne "\033(K" >/dev/tty${x}

  fi

  done

  fi 

--- 65,85 ----

  

  if [ "${retval}" -eq 0 ]

  then

+ loc_switch="\033(K"

+ if [ -n "${UTF8}" ] && [ "${UTF8}" == "yes" ]

+ then

+ loc_switch="\033%G"

+ fi

+ 

  for x in $(seq 1 "${RC_TTY_NUMBER}")

  do

  # Using DEVFS ?

  if [ -e /dev/.devfsd ] || \

     [ -e /dev/.udev -a -d /dev/vc ]

  then

+ echo -ne ${loc_switch} >/dev/vc/${x}

  else

+ echo -ne ${loc_switch} >/dev/tty${x}

  fi

  done

  fi 

```

Все как было, так и осталось  :Sad: 

----------

## viy

vim сломался? он очень адекватно реагирует на локалку, попробуй запустить его LANG=ru_RU.UTF-8 vim ....

----------

## dish

Тут, наверное, не видно, а у меня на экране козяблы  :Sad: 

```
VIM ::: Vi IMproved ( Vi) :::                                                                        

~                                 6.3.68                            

~                                       

~         Vim                                               

~                          :help iccf<Enter>                                                               

~         :q<Enter>                   :help<Enter>  <F1>      :help version6<Enter>                                                                   
```

В доках тоже написано, что с ним проблем нет....

Видимо, где-то я накосячил, а где не могу понять....

Уже все перечитал и перепроверил.

Эту тоже прочитал...

В Иксах при этом все нормально. Только с консольными проблемы....

Хм..... Чего-то я недопонял. В терминале под рутом все нормально, а под юзером никак...

В консоли что так, что так закорючки...

----------

## viy

Ммм... Я бы пересобрал ncurses с флагом unicode, а затем и vim.

----------

## dish

Я перед всеми манипуляциями с конфигами делал emerge -uD --newuse world

emerge -pv ncurses

```
Calculating dependencies ...done!

[ebuild   R   ] sys-libs/ncurses-5.4-r6  -bootstrap -build -debug -doc +gpm -minimal -nocxx +unicode 2,103 kB
```

emerge -pv vim

```
Calculating dependencies ...done!

[ebuild   R   ] app-editors/vim-6.3.068  -acl -bash-completion -cscope -debug +gpm -minimal +ncurses +nls +perl +python -ruby (-selinux) -vim-with-x 0 kB 

```

делал revdep-rebuild, он ругается только на какую-то scilib.... 

Все равно попробую пересобрать, вдруг поможет.

----------

## viy

Уточним --- в Хах тот же vim работает?

Т.е. проблема только в консоли?

Тогда:

* надо ставить terminus-font;

* патчить consolefont (это можно сделать и руками, формат diff'ов простой --- добавь строки с "+" и удали с "-");

* прописывать в /etc/rc.conf

KEYMAP="-u ru1" #или что там...

CONSOLEFONT="ter-k16n" #тоже на любителя

UNICODE="yes"

Должно помочь.

----------

## YD

 *viy wrote:*   

> Использование стандартных типов данных (для данной платформы) предпочтительней при условии, что данный тип работает корректно. typedef (а чаще #define'ы в связке с configure) используются как раз для "вынесения за скобки" операций над подобными типами.
> 
> В любом случае --- это вопрос поддержки софта в соответствии со стандартами.

 

А чем typedef противоречит стандартам? (: Очень всё глямурно. Например меня часто упрекают в их использовании "лишних констант" и typedef, зато мне не надо никогда коверкать код чтобы в корне поменять его условия работы. Если говорить конкретно об ООП в C++, то там typedef/define не нужен, vtables делают своё дело, но разумеется со своим overhead. Стандартный тип данных не признаю ни в каком месте кроме локальных на подобии счётчика-итератора и как базовые для формирования своих типов. Стандартные типы хороши для кода в 100 строчек, но не для большого проекта.

----------

## viy

Думаю, что мы говорим об одном и том же в плане typedef'ов. Не важно, что скрывает typedef.

Надо стараться использовать то, что стандартизовано (тот же wchar тип). И typedef в этом помогает, особенно если стандартная реализация хромает и требуются надстройки.

Я работаю больше в с. Для OO в последнее время python использую.

----------

## dish

Да, gvim нормально работает.

 *viy wrote:*   

> * надо ставить terminus-font;
> 
> * патчить consolefont (это можно сделать и руками, формат diff'ов простой --- добавь строки с "+" и удали с "-");
> 
> * прописывать в /etc/rc.conf
> ...

 

Все стоит уже. Видимо, патч криво встал...

Пропатчу руками.

Кстати, документ Сергея Кулешова устаревший.

Он рекомендует делать по тому, который в Wiki.

----------

## dish

Локаль в итоге встала, но:

возникли некоторые траблы с qt-шными приложениями  :Sad: 

Пришлось откатиться назад на koi8  :Sad: 

xmule и valknut все равно не заработали с русским поиском  :Sad: 

Спасибо всем!!!

----------

## kon

Тыры пыры, быстрые какие все.

Работает поиск русских файлов в aMule.

www.assi.ru/screen.png

Так что, может быть, проблема в 2Р2 клиентах, которые Вы используете.

Локаль, естественно, ru_RU.UTF-8

Опять же интересно с какими QT приложениями траблы?

----------

## dish

aMule это хорошо, только он у меня вылетает при создании хешей для 40 гигов мп3  :Sad: 

А для DC я вообще никаких других, кроме valknut, не знаю.

Проблемы с КуТе не злостные, krusader, korganizer, и т.п. Лекарство нашел, но пока времени нет (со шрифтами и кодировками надо играть).  :Sad: 

Сдам сессию и тогда полностью перейду на UTF-8.

Позвольте спросить: а в чем приимущества UTF8-локали перед KOI8-локалью?

----------

## viy

Для 2-х языков преимуществ почти нет, если брать только тебя. С другой стороны, данные в utf-8 увидят все без гемоороя с перекодировками и сменой локали (если у "всех" тоже utf-8  :Wink: )

Если же надо пользоваться 3-мя и более языками сразу (один из них Английский), то других вариантов и нет.

----------

## dish

Спасибо!

----------

## Balancer

Даже с двумя языками в UTF-8 легко получить кучу преимуществ  :Smile:  Скажем, ни в одной однобайтовой кодировке с русским нет одновременно литературных кавычек и псевдографики  :Smile:  А если ещё греческих буковок захочется, чтобы в формуле указать?  :Smile: 

----------

