Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Голосование

В чем преимущество кодировки UTF8?

Современно, а значит лучше
Допустим любой национальный символ
Кодировка не имеет значения
Предпочитаю другие киррилические кодировки
Кроме преимуществ, есть и недостатки

Автор Тема: Отказ от UTF8 в пользу CP1251  (Прочитано 4195 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Адмирал

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Отказ от UTF8 в пользу CP1251
« : 05 Сентябрь 2014, 23:35:29 »
Доброго времени суток.
Господа, подскажите, как в Ubuntu 10.04, установить основную локаль CP1251.

После плясок с бубном, на манер -
#dpkg-reconfigure locales
#sudo gedit /var/lib/locales/supported.d/ru, поставил нужную локаль поперед всех
# export LC_ALL=ru_RU.CP1251

проверяем, вроде все нормально:
# locale
LANG=ru_UA.UTF-8
LANGUAGE=ru:en
LC_CTYPE="ru_RU.CP1251"
LC_NUMERIC="ru_RU.CP1251"
LC_TIME="ru_RU.CP1251"
LC_COLLATE="ru_RU.CP1251"
LC_MONETARY="ru_RU.CP1251"
LC_MESSAGES="ru_RU.CP1251"
LC_PAPER="ru_RU.CP1251"
LC_NAME="ru_RU.CP1251"
LC_ADDRESS="ru_RU.CP1251"
LC_TELEPHONE="ru_RU.CP1251"
LC_MEASUREMENT="ru_RU.CP1251"
LC_IDENTIFICATION="ru_RU.CP1251"
LC_ALL=ru_RU.CP1251

Но после перезагрузки, все возвращается на круги своя, то бишь UTF8  >:(.

Оффлайн Pilot6

  • Старожил
  • *
  • Сообщений: 13219
  • Xubuntu 18.04
    • Просмотр профиля
Re: Отказ от UTF8 в пользу CP1251
« Ответ #1 : 06 Сентябрь 2014, 14:41:41 »
А какова цель такого действия?
Я в личке не консультирую. Вопросы задавайте на форуме.

Оффлайн Адмирал

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Отказ от UTF8 в пользу CP1251
« Ответ #2 : 06 Сентябрь 2014, 16:42:22 »
Основная цель - установка Ubuntu вместо Windows, для офисных целей, в основном для малого и среднего бизнеса. Перенос моих виндовых разработок в Lazarus + Firebird. И будьте добры, не агитируйте меня в пользу других средств, буду весьма признателен за ответ по сабжу.
Итак, мои мотивы:
1. Используются только английские и кириллические символы, а стало быть, все их варианты, умещаются в одном байте на символ.
2. Используя UTF8, получаем четырехкратную избыточность данных (4 байта на символ). Что приводит к неоправданному расходу ресурсов компьютера. 
3. Системная локаль UTF8, в четыре раза, упрощает работу по интернационализации для тысяч программистов и в четыре раза усложняет работу для сотен миллионов компьютеров. Есть разница, серверу обработать и отправить, а клиенту принять и обработать 1Мб или 4Мб?
Так вот, вопрос, оправдана ли данная унифекация стоимостью оборудования и энергозатратами?

Оффлайн .ubuntufan

  • Активист
  • *
  • Сообщений: 638
    • Просмотр профиля
Re: Отказ от UTF8 в пользу CP1251
« Ответ #3 : 06 Сентябрь 2014, 16:56:09 »
Для кириллицы 2 байта на символ (а для ascii 1 байт) а не 4 и о таком "неоправданном расходе ресурсов" простительно было задумываться в 80 но не в настоящее время, где вычислительная мощность растет все больше и больше из года в год. К тому же менять кодировку целой системы для "некоторых виндовых разработок" все равно что стрелять из пушки по воробьям.

Но дело ваше:
localedef -v -c -i ru_RU -f CP1251 ru_RU.CP1251
vim /etc/default/locale
# LANG="ru_RU.CP1251"
# ...

Пользователь решил продолжить мысль [time]06 Сентябрь 2014, 17:30:04[/time]:
Алсо существует возможность менять окружение для конкретных программ, например написав такой шелл-скрипт:

#!/bin/bash
export LC_ALL=ru_RU.CP1251
./some_program

Или ограничивать костыльные разработки, требующие определенной настройки системы в легковесных LXC-контейнерах, см. к примеру Docker
« Последнее редактирование: 06 Сентябрь 2014, 21:23:47 от .ubuntufan »

Оффлайн Адмирал

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Отказ от UTF8 в пользу CP1251
« Ответ #4 : 07 Сентябрь 2014, 06:18:37 »
Логично, компы мощнеют, а занять их не чем.  :) Стрельба из пушки по воробьям, оправдана именно внедряемыми решениями, где из всей системы тщательно удаляются все развлекухи, особенно браузер и работает одна программа (POS-терминал или другая GUIёвина), ради которой весь сырбор. Вот и убеждаюсь, что Ubuntu для этих целей, не лучший выбор.
А решения вовсе не костыльные. Приложения, собранные в Lazarus, будут в нативной кодировке UTF8. С СУБД и ее кодировками, проблем тоже нет. А чтобы сконвертить старую БД из 1251 в новую UTF8, пишется утиля или скрипт, минут эдак за 10. Да и клиентов не интересует, что база данных будет пухнуть, все таки в четыре раза быстрее, проверено.
За код, спасибо, правда результата он не дал, поколдую на досуге.
Тему закрывать не спешу, вдруг найдутся единомышленники, это ведь, русскоязычный форум.
« Последнее редактирование: 07 Сентябрь 2014, 07:51:20 от Адмирал »

Оффлайн john1400

  • Активист
  • *
  • Сообщений: 582
  • debian
    • Просмотр профиля
Re: Отказ от UTF8 в пользу CP1251
« Ответ #5 : 18 Сентябрь 2014, 21:04:26 »
Так вот, вопрос, оправдана ли данная унифекация стоимостью оборудования и энергозатратами?
Тут трудочасы, время жизни. Если парк машин синхронизация, библиотека.
Стоимость оборудования и эноргазатраты головная боль хозяйчика.

UTF8 лучше на будущее ориентирован, google постепенно задавит
CP1251

Оффлайн .ubuntufan

  • Активист
  • *
  • Сообщений: 638
    • Просмотр профиля
Re: Отказ от UTF8 в пользу CP1251
« Ответ #6 : 18 Сентябрь 2014, 21:49:22 »
Цитировать
база данных будет пухнуть, все таки в четыре раза быстрее, проверено

Не знаю каким вы методом "проверяли", но если вы мне не верите, можете сами проверить и убедиться:

user@example:~$ echo "Privet" | xxd -b
0000000: 01010000 01110010 01101001 01110110 01100101 01110100  Privet
0000006: 00001010                                               .
user@example:~$ echo "Привет" | xxd -b
0000000: 11010000 10011111 11010001 10000000 11010000 10111000  ......
0000006: 11010000 10110010 11010000 10110101 11010001 10000010  ......
000000c: 00001010   

Цитировать
Принцип кодирования

1. Если размер символа в кодировке UTF-8 = 1 байт

Код имеет вид (0aaa aaaa), где «0» — просто ноль, остальные биты «a» — это код символа в кодировке ASCII;
2. Если размер символа в кодировке в UTF-8 > 1 байт (то есть от 2 до 6):

2.1 Первый байт содержит количество байтов символа, закодированное в единичной системе счисления;
2 — 11
3 — 111
4 — 1111
5 — 1111 1
6 — 1111 11
2.2 «0» — бит терминатор, означающий завершение кода размера
2.3 далее идут значащие байты кода, которые имеют вид (10xx xxxx), где «10» — биты признака продолжения, а x — значащие биты.

В общем случае варианты представления одного символа в кодировке UTF-8 выглядят так:

(1 байт)  0aaa aaaa
(2 байта) 110x xxxx 10xx xxxx
(3 байта) 1110 xxxx 10xx xxxx 10xx xxxx
(4 байта) 1111 0xxx 10xx xxxx 10xx xxxx 10xx xxxx
(5 байт)  1111 10xx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx
(6 байт)  1111 110x 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx 10xx xxxx

https://ru.wikipedia.org/wiki/UTF-8

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12066
  • Xubuntu 20.04 (64bit)
    • Просмотр профиля
Re: Отказ от UTF8 в пользу CP1251
« Ответ #7 : 18 Сентябрь 2014, 22:15:02 »
А у меня одного подозрения, что ТС путает UTF-8 с UTF-32 :idiot2:

О каких 4 разах речь, когда вся кириллица - максимум 2 байта (пруф).

И кроме того всякие CPблабла уже и на винде постепенно вытесняются кодировкой UTF-8 (многие последние форматы от M$ уже подразумевают хранение строк в UTF-8).

Как программисту мне кажется, что использование UTF-8 - очевидное упрощение во многих аспектах.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: http://help.ubuntu.ru/wiki/uefiboot

Оффлайн Адмирал

  • Автор темы
  • Новичок
  • *
  • Сообщений: 6
    • Просмотр профиля
Re: Отказ от UTF8 в пользу CP1251
« Ответ #8 : 25 Сентябрь 2014, 16:22:36 »
Ну, раз так много хвалебных од в пользу UTF8, будем преподносить ее использование, как фичу, а не баг.
Количество байт на символ (для UTF8), в разных СУБД, может отличаться от 2 (предположительно) до 4 в Firebird (осторожно, место для холивара))). Стало быть, целесообразность использования CP1251, не видна с высот WEB-программирования.
Изначально, я спрашивал, как установить локаль CP1251 и возможно ли это.
На том тему закрываем. Спасибо за участие.

 

Страница сгенерирована за 0.242 секунд. Запросов: 27.