Хобрук: Ваш путь к мастерству в программировании

В чем разница между локалью и кодировкой (терминалом)

Я пробовал несколько способов установить «кодировку» терминала из программы на С++. Все, что я мог сделать, это изменить локаль. или переменная LANG.

Тем не менее я могу вводить символы, которые имеют другую кодировку, чем LANG (и вывод nl_langinfo(CODESET))

Но если я зайду в Terminal > Set Character Encoding > ISO-8859-15 (или что-то в этом роде), тогда будет разрешено только ISO-8859-15. Могу ли я добиться того же (настройка из графического интерфейса) из моей программы на C++?

Я использовал setlocale(LC_CTYPE,""), чтобы установить кодировку в терминальную кодировку, но она просто использует переменную LANG. И позволяет использовать и другие символы.

(После Терминала > Установить кодировку символов > ISO-8859-1 (Latin1))

>setenv LANG en_US.iso885915 --> latin9
>./a.out 
Current Locale : C
Lang info : ANSI_X3.4-1968
Trying to change locale from C to ""
Current Locale : en_US.iso885915 
Lang info : ISO-8859-15
Enter some string :¤¦¨´¸¼½¾ dfsafas  --> but these are Latin1 charaters !!
Entered string : ¤¦¨´¸¼½¾ dfsafas --> They are even printed back !!

Итак, это привело меня к вопросу, правильно ли я понимаю локаль и кодировку.

Может кто-нибудь пояснить разницу?


Ответы:


1

Кодировка — это только часть настроек локали, и для терминалов она влияет на то, как терминал отображает и обрабатывает ввод.

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

setlocale() установит или запросит текущую локаль программы.

Терминалы обычно порождают новую оболочку, и установка переменных среды LANG или LC_* повлияет только на программы, которые будут работать в этой оболочке.

Кроме того, установка локали или кодировки не препятствует вводу «других» символов.

Этот ответ должен помочь прояснить ситуацию.

14.05.2013
  • Спасибо за объяснение, многое проясняется. Ссылка тоже была полезна. 15.05.2013
  • Новые материалы

    Основы принципов S.O.L.I.D, Javascript, Git и NoSQL
    каковы принципы S.O.L.I.D? Принципы SOLID призваны помочь разработчикам создавать надежные, удобные в сопровождении приложения. мы видим пять ключевых принципов. Принципы SOLID были разработаны..

    Как настроить Selenium в проекте Angular
    Угловой | Селен Как настроить Selenium в проекте Angular Держите свое приложение Angular и тесты Selenium в одной рабочей области и запускайте их с помощью Mocha. В этой статье мы..

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..