как узнать кодировку файла линукс

проблемы с кодировкой

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

как узнать кодировку файла линукс. Смотреть фото как узнать кодировку файла линукс. Смотреть картинку как узнать кодировку файла линукс. Картинка про как узнать кодировку файла линукс. Фото как узнать кодировку файла линукс

Нажми ALT и F2.
Там набери xterm и нажми enter.
В запущенном терминале веди команду locate.
Очень хочется посмотреть на то, что она скажет.

как узнать кодировку файла линукс. Смотреть фото как узнать кодировку файла линукс. Смотреть картинку как узнать кодировку файла линукс. Картинка про как узнать кодировку файла линукс. Фото как узнать кодировку файла линукс

как узнать кодировку файла линукс. Смотреть фото как узнать кодировку файла линукс. Смотреть картинку как узнать кодировку файла линукс. Картинка про как узнать кодировку файла линукс. Фото как узнать кодировку файла линукс

как узнать кодировку файла линукс. Смотреть фото как узнать кодировку файла линукс. Смотреть картинку как узнать кодировку файла линукс. Картинка про как узнать кодировку файла линукс. Фото как узнать кодировку файла линукс

Если кодировки файла и locale не совпадают при просмотре ты видишь иероглифы. Ещё иегорлифы бывают если неправильно настроено средство вывода (программа-терминал).

Для того чтобы посмотреть файл в другой кодировке надо либо поменять кодировку текущей локаль(сильно не рекомендуется, часто нужно перенастраивать терминал), либо перекодировать файл.

Потому что в файлах, которые вы создавали в винде, была кодировка CP1251. А теперь ваш текстовый редактор открывает их используя кодировку текущей локали (команда locale), которая скорее всего UTF-8.

Это не значит что для того чтобы редактировать эти файлы вам придётся менять локаль.

Просто не все редакторы умеют [корректно] распознавать кодировки или их нужно настраивать.
gedit из гнома вроде бы сносно определяет кодировку, жаль только что хоть меню для настройки кодировки там даже есть, оно, в лучших традициях сраного ХИГа, появляется только если gedit не может определить кодировку файла.

Можно и не париться, а просто сконвертить все txt-шки в кошерный UTF8 с помощью enconv.

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

Источник

[СИ] Как узнать кодировку локали.

[СИ] Как узнать кодировку локали.

Имеется самодельная СИ-программа. Она предназначена для работы
на машине-сервере в Дата-центре. Запускается через PuTTY.
Выдача программы должна быть на русском языке. Но ничего не
переключать вне этой программы.
В исходнике кодировка windows-1251. В программе есть перекодировщики
на koi8-r, utf-8.

На моем сервере и еще на двух других
опробована, там кодировка koi8-r. Работает, но я пока жестко
задал перекодировщик. Я слыхал, что некоторые работают на
других кодировках.

Вопрос-1.
Правильно ли я понимаю, что когда я подключаюсь через PuTTY,
то это моя локаль?

Вопрос-2.
Существует ли способ, чтоб программа узнала, какую кодировку
лучше выдать?

Кто знает прошу ответить.

как узнать кодировку файла линукс. Смотреть фото как узнать кодировку файла линукс. Смотреть картинку как узнать кодировку файла линукс. Картинка про как узнать кодировку файла линукс. Фото как узнать кодировку файла линукс

> Правильно ли я понимаю, что когда я подключаюсь через PuTTY,

.
При подключении в настройках Translation выставляйте CP1251 и в самой системе export LC_ALL=ru_RU.CP1251 и радуйтесь, если локаль сгенерирована.

Существует ли способ, чтоб программа узнала, какую кодировку

Запросто. Просто воспользуйтесь gettext при написании программы.
Если лень, смотрите из программы значения переменных окружения :
LANG
LANGUAGE
LC_CTYPE
LC_NUMERIC
LC_TIME
LC_COLLATE
LC_MONETARY
LC_MESSAGES
LC_PAPER
LC_NAME
LC_ADDRESS
LC_TELEPHONE
LC_MEASUREMENT
LC_IDENTIFICATION
LC_ALL

Локаль не твоя, твоей является только кодировка PuTTY.
Почитай man locale.h

как узнать кодировку файла линукс. Смотреть фото как узнать кодировку файла линукс. Смотреть картинку как узнать кодировку файла линукс. Картинка про как узнать кодировку файла линукс. Фото как узнать кодировку файла линукс

Почитал темы oleg_2. Какой упорный парень. Молодец.

правда маны не читает

Я не знаю что такое gettext.

как узнать кодировку файла линукс. Смотреть фото как узнать кодировку файла линукс. Смотреть картинку как узнать кодировку файла линукс. Картинка про как узнать кодировку файла линукс. Фото как узнать кодировку файла линукс

Вероятно, gettext — лучший вариант.

Но если хочется именно в программе держать константы на русском, то делаем так:

как узнать кодировку файла линукс. Смотреть фото как узнать кодировку файла линукс. Смотреть картинку как узнать кодировку файла линукс. Картинка про как узнать кодировку файла линукс. Фото как узнать кодировку файла линукс

> Почитал темы oleg_2. Какой упорный парень.

У тебя опечатки в слове «упоротый»

как узнать кодировку файла линукс. Смотреть фото как узнать кодировку файла линукс. Смотреть картинку как узнать кодировку файла линукс. Картинка про как узнать кодировку файла линукс. Фото как узнать кодировку файла линукс

Проще действительно воспользоваться gettext’ом. Это несложно, вначале делаем объявления макросов:

Чтобы при обновлении программы не вставлять новые строки вручную, добавляем их при помощи msgmerge:

Все это легко поддается автоматизации в Makefile’ах или cmake’ах.

В итоге от вас требуется лишь заполнить перевод и прогнать make еще раз.

// кроме того, вы получаете возможность выводить сообщения на нескольких языках, что довольно удобно, если вдруг программу потребуется куда-то еще отправлять

Источник

Работа с «плохими» файлами в командной строке в Linux

При работе в командной строке администраторы часто сталкиваются с необходимостью что-то сделать с определенным файлом: удалить, переместить, скопировать. При выполнении подобных задач зачастую приходится обращаться к файлам по имени, что может быть затруднительно, поскольку в именах файлов могут встречаться самые разные символы. Даже те, которых нет на клавиатуре. В этом плане работу может облегчить файловый менеджер, в котором файл можно просто выделить и совершить с ним нужное действие. Но для тех, кто привык работать исключительно в командной строке, предлагаются следующие способы.

В качестве shell-оболочки рассмотрим bash, как самую используемую. А в качестве операции над файлами рассмотрим удаление, как самую деструктивную.

Ситуации могут быть разными. В текущей директории могут быть файлы, которые нужно удалить вместе с теми, которые нужно оставить. Имена у них могут быть самыми разными. Причем первые от последних могут отличаться только одним каким-нибудь заковыристым символом.

В названии файла есть служебный символ bash

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

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

С полным списком служебных символов и механизмом экранирования в bash можно ознакомиться в man bash. Раздел QUOTING.

Имя файла начинается с дефиса

Удалить файл, начинающийся с дефиса простым экранированием не получится, и команда rm будет воспринимать дефис, как начало своего аргумента. Решить проблему довольно просто:

Удаляем по wildcard

Если удаление файлов попадает под wildcard-маску, то можно удалить всю группу файлов:

Файлы с управляющим символом в названии

В названии файла может встречаться управляющий ASCII-символ, такой как перевод строки (\n), табуляция (\t), backspace (\b). Это символы с ASCII-кодами менее 0x20, а также символы DELETE и ESC. Для удаления таких файлов подходит конструкция:

Удаление файлов с символами utf8

Если имя файла содержит символ в кодировке utf8, который мы не можем набрать на клавиатуре, то удалить такой файл можно выделением его мышкой, копированием в буфер обмена и последующей вставкой на ввод команды rm. Главное условие состоит в том, что наш терминал должен работать в кодировке utf8. Кодировка выставляется в настройках терминала. Будь то xterm, putty или брутальный linux tty.

Перекодировка имени файла

Подозревая, что имя файла находится в кодировке, отличной от кодировки терминала, мы можем выполнить перекодирование всех файлов в текущей директории. В результате файлы с битой кодировкой будут перекодированы, а файлы с ascii-символами изменений не претерпят. Существенный плюс этого способа – приведение всех файлов в читабельный вид.

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

Также можно воспользоваться сторонними программами, которые попытаются распознать кодировку автоматически. Например, онлайн-декодер Лебедева.

Если вы встретили такие символы в примонтированном media-носителе или смонтированном разделе Windows, не спешите ничего перекодировать. Возможно, вы просто указали неправильные опции монтирования.

Автокомплит

В случае, если в директории название требуемого файла начинается уникально, и это название можно однозначно сформировать автокомплитом, то это довольно простой способ удалить файл:

Удаляем файл через меню выбора

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

Удаление по номеру inode

Удалить файл можно по его номеру inode. Номер inode уникально идентифицирует файл в файловой системе. Узнать номер inode можно с помощью команды ls, а удалить – с помощью find. Недостаток этого способа, такой же, как у предыдущего. Неудобно, в случае большого числа файлов.

Удаление по hex-коду

И нельзя не упомянуть один суровый метод. Удаление по hex-кодам. Суть такова: мы узнаем hex-коды всех байтов в имени файла, а затем удаляем файл, указывая вместо имени hex-коды.

Хорошо, все-таки, что на практике такие файлы попадаются нечасто.

Источник

Автоопределение кодировки текста

как узнать кодировку файла линукс. Смотреть фото как узнать кодировку файла линукс. Смотреть картинку как узнать кодировку файла линукс. Картинка про как узнать кодировку файла линукс. Фото как узнать кодировку файла линукс

Введение

Я очень люблю программировать, я любитель и первый и последний раз заработал на программировании в далёком 1996 году. Но для автоматизации повседневных задач иногда что-то пишу. Примерно год назад открыл для себя golang. В качестве инструмента создания утилит golang оказался очень удобным. Итак.

Возникла потребность обработать большое количество (больше тысячи, так и вижу улыбки профи) архивных файлов со специальной геофизической информацией. Формат файлов текстовый, простой. Если вдруг интересно то это LAS формат.
LAS файл содержит заголовок и данные.

Данные практически CSV, только разделитель табуляция или пробелы.

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

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

В итоге изобрёл велосипед на golang и соответственно родилась маленькая библиотечка с возможностью детектировать кодовую страницу.

Про кодировки. Не так давно на хабре была хорошая статья про кодировки Как работают кодировки текста. Откуда появляются «кракозябры». Принципы кодирования. Обобщение и детальный разбор Если хочется понять, что такое “кракозябры” или “кости”, то стоит прочитать.

В начале я накидал своё решение. Потом пытался найти готовое работающее решение на golang, но не вышло. Нашлось два решения, но оба не работают.

Обе уверенно ошибаются на некоторых кодировках. Стандартная та вообще почти ничего определить не может по текстовым файлам, оно и понятно, её для html страниц делали.

При поиске часто натыкался на готовые утилиты из мира linux — enca. Нашёл её версию скомпилированную для WIN32, версия 1.12. Её я тоже рассмотрю, там есть забавности. Я прошу сразу прощения за своё полное незнание linux, а значит возможно есть ещё решения которые тоже можно попытаться прикрутить к golang коду, я больше искать не стал.

Сравнение найденных решений на автоопределение кодировки

Подготовил каталог softlandia\cpd тестовые данные с файлами в разных кодировках. Содержимое файлов очень короткое и одинаковое. Одна строка “Русский в кодировке CodePageName”. Дополнил файлами со смешением кодировок и некоторыми сложными случаями и попробовал определить.

Мне кажется, получилось забавно.

#Кодировкаhtml/charsetsaintfish/chardetsoftlandia/cpdenca
1CP1251windows-1252CP1251CP1251CP1251
2CP866windows-1252windows-1252CP866CP866
3KOI8-Rwindows-1252KOI8-RKOI8-RKOI8-R
4ISO-8859-5windows-1252ISO-8859-5ISO-8859-5ISO-8859-5
5UTF-8 with BOMutf-8utf-8utf-8utf-8
6UTF-8 without BOMutf-8utf-8utf-8utf-8
7UTF-16LE with BOMutf-16leutf-16leutf-16leISO-10646-UCS-2
8UTF-16LE without BOMwindows-1252ISO-8859-1utf-16leunknown
9UTF-16BE with BOMutf-16leutf-16beutf-16beISO-10646-UCS-2
10UTF-16BE without BOMwindows-1252ISO-8859-1utf-16beISO-10646-UCS-2
11UTF-32LE with BOMutf-16leutf-32leutf-32leISO-10646-UCS-4
12UTF-32LE without BOMwindows-1252utf-32leutf-32leISO-10646-UCS-4
13UTF-32BE with BOMwindows-1252utf-32beutf-32beISO-10646-UCS-4
14UTF-32BE without BOMwindows-1252utf-32beutf-32beISO-10646-UCS-4
15KOI8-R (UPPER)windows-1252KOI8-RKOI8-RCP1251
16CP1251 (UPPER)windows-1252CP1251CP1251KOI8-R
17CP866 & CP1251windows-1252CP1251CP1251unknown

Наблюдение 1

enca не определила кодировку у файла UTF-16LE без BOM — это странно, ну ладно. Я попробовал добавить больше текста, но результата не получил.

Наблюдение 2. Проблемы с кодировками CP1251 и KOI8-R

Строка 15 и 16. У команды enca есть проблемы.
Здесь сделаю объяснение, дело в том, что кодировки CP1251 (она же Windows 1251) и KOI8-R очень близки если рассматривать только алфавитные символы.

Таблица CP 1251

как узнать кодировку файла линукс. Смотреть фото как узнать кодировку файла линукс. Смотреть картинку как узнать кодировку файла линукс. Картинка про как узнать кодировку файла линукс. Фото как узнать кодировку файла линукс

Таблица KOI8-r

как узнать кодировку файла линукс. Смотреть фото как узнать кодировку файла линукс. Смотреть картинку как узнать кодировку файла линукс. Картинка про как узнать кодировку файла линукс. Фото как узнать кодировку файла линукс

В обеих кодировках алфавит расположен от 0xC0 до 0xFF, но там, где у одной кодировки заглавные буквы, у другой строчные. Судя по всему enca, работает по строчным буквам. Вот и получается, если подать на вход программе enca строку “СТП” в кодировке CP1251, то она решит, что это строка “яро” в кодировке KOI8-r, о чём и сообщит. В обратную сторону также работает.

Наблюдение 3

Стандартной библиотеке html/charset можно доверить только определение UTF-8, но осторожно! Пользоваться следует именно charset.DetermineEncoding(), поскольку метод utf8.Valid(b []byte) на файлах в кодировке utf-16be возвращает true.

Собственный велосипед

как узнать кодировку файла линукс. Смотреть фото как узнать кодировку файла линукс. Смотреть картинку как узнать кодировку файла линукс. Картинка про как узнать кодировку файла линукс. Фото как узнать кодировку файла линукс

Автоопределение кодировки возможно только эвристическими методами, неточно. Если мы не знаем, на каком языке и в какой кодировке записан текстовый файл, то определить кодировку с высокой точночностью наверняка можно, но будет сложновато… и нужно будет достаточно много текста.

Для меня такая цель не стояла. Мне достаточно определять кодировки в предположении, что там есть русский язык. И второе, определять нужно по небольшому количеству символов – на 10 символах должно быть достаточно уверенное определение, а желательно вообще на 5–6 символах.

Алгоритм

Когда я обнаружил совпадение кодировок KOI8-r и CP1251 по местоположению алфавита, то на пару дней загрустил… стало понятно, что чуть-чуть придётся подумать. Получилось так.

Критерии соответствия

Первый критерий

Первым критерием является количество самых популярных букв русского алфавита.

Наиболее часто встречаются буквы: о, е, а, и, н, т, с, р, в, л, к, м, д, п, у. Данные буквы дают 82% покрытия. Для всех кодировок кроме KOI8-r и CP1251 я использовал только первые 9 букв: о, е, а, и, н, т, с, р, в. Этого вполне хватает для уверенного определения.

А вот для KOI8-r и CP1251 пришлось доработать напильником. Коды некоторых из этих букв совпадают, например буква о имеет в CP1251 код 0xEE при этом в KOI8-r этот код у буквы н. Для этих кодировок были взяты следующие популярные буквы. Для CP1251 использовал а, и, н, с, р, в, л, к, я. Для KOI8-r — о, а, и, т, с, в, л, к, м.

Второй критерий

К сожалению, для очень коротких случаев (общая длина русского текста 5-6 символов) встречаемость популярных букв на уровне 1-3 шт и происходит нахлёст кодировок KOI8-r и CP1251. Пришлось вводить второй критерий. Подсчёт количества пар согласная+гласная.
Такие комбинации ожидаемо наиболее часто встречаются в русском языке и соответственно в той кодировке в которой число таких пар больше, та кодировка имеет больший критерий.

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

Особенности, с которыми я столкнулся

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

Проблемы

Лично походил по некоторым подводным камушкам из 50 оттенков Go: ловушки, подводные камни и распространённые ошибки новичков.
Излишне переживая и пытаясь дуть на воду, прослышав от других о страшных ожогах от молока, переборщил с проверкой входного параметра типа io.Reader. Я проверял переменную типа io.Reader с помощью рефлексии.

Но как оказалось в моём случае достаточно проверить на nil. Теперь всё стало проще

вызов bufio.NewReader( r ).Peek(ReadBufSize) спокойно проходит следующий тест:

В этом случае Peek() возвращает ошибку.

Разок наступил на грабли с передачей массивов по значению. Немного тупанул на попытке изменять элементы, хранящиеся в map, пробегая по ним в range…

Прелести

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

Конечно, очень приятно жить со сборщиком мусора. Полагаю мне ещё предстоит освоить грабли автоматизации выделения/освобождения памяти, но пока дебильная улыбка не покидает лица.
Строгая типизация — тоже кусочек счастья.

Переменные, имеющие тип функции — соответственно лёгкая реализация различного поведения у однотипных объектов.

Странно мало пришлось сидеть в отладчике, перечитывание кода обычно даёт результат.

Щенячий восторг от наличия массы инструментов из коробки, это чудное ощущение, когда компилятор, язык, библиотека и IDE Visual Studio Code работают на тебя вместе, слаженно.

Спасибо falconandy за конструктивные и полезные советы
Благодаря ему

Продолжаю добавлять тесты, выявился случай не определения UTF16. Обновил. Теперь UTF16 и LE и BE определяются даже в случае отсутствия русских букв

Источник

Как определить в какой кодировке файл?

Как узнать в какой кодировке файл Linux?

Как узнать кодировку файла Excel?

Вы можете просто открыть файл с помощью блокнота, а затем goto File — > Save As. Рядом с кнопкой Сохранить появится выпадающее меню кодировка, в котором будет выбрана текущая кодировка файла.

Как узнать кодировку в Windows?

Как посмотреть кодировку в Word?

В диалоговом окне Преобразование файла выберите пункт Кодированный текст. В диалоговом окне Преобразование файла установите переключатель Другая и выберите нужную кодировку из списка. В области Образец можно просмотреть текст и проверить, правильно ли он отображается в выбранной кодировке.

Как убрать Кракозябры в Excel?

Иероглифы в Excel вместо текста

Как правильно открыть CSV файл в Excel?

Как открыть файл CSV в Excel

Что делать если вместо текста иероглифы в Word?

Вместо текста иероглифы, квадратики и крякозабры (в браузере, Word, тексте, окне Windows) … Происходит это из-за того, что текст на страничке написан в одной кодировке (более подробно об этом можете узнать из Википедии), а браузер пытается открыть его в другой.

Какая кодировка у txt файла?

По умолчанию новый текстовый файл создается в кодировке 1251. Соответственно и программы, создающие его автоматически (типа DownloadMaster) создают его тоже в этой кодировке.

Как поменять кодировку текста в Notepad ++?

Как сменить кодировку в блокноте?

Что делать, чтобы сменить кодировку в Блокноте по умолчанию с ANSI на другую

Почему в ворде вместо букв квадратики?

Часто «квадратики» в ворде бывают, если в системе нет шрифта, который используется в документе. В этом случае достаточно сменить шрифт в документе. … Нормальный документ, содержащий кучу единиц и двоек.

Как восстановить кодировку в Word?

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *