Как найти кодирование файла с помощью сценария на Linux?

Вы можете просто запросить имя пользователя, а затем в модели контроллера / формы удалить @ (и весь префикс ' http://instagram.com/ ', если кто-то вставит URL вместо имени пользователя) [114 ]

<%= f.text_field :instagram_username, required: true, label: "instagram.com/" %>

Контроллер что-то вроде:

 obj = Model.new(model_params)
 if (username = params.dig(:some_model, :instagram_username))
   username = username.gsub(%r{https?://instagram.com/}, '').gsub(/^@/, '')
   obj.url = "https://instagram.com/#{CGI.escape username}"
 end

280
задан jww 14 October 2019 в 14:56
поделиться

3 ответа

Похоже, вы ищете enca . Он может угадывать и даже конвертировать между кодировками. Просто посмотрите на страницу руководства .

Или, если это не удалось, используйте файл -i (linux) или -I (osx). Это выведет информацию MIME-типа для файла, которая также будет включать кодировку набора символов. Я нашел для него man-страницу :)

384
ответ дан 23 November 2019 в 02:00
поделиться

Это не то, что вы можете сделать безошибочно. Одной из возможностей может быть проверка каждого символа в файле, чтобы убедиться, что он не содержит символов в диапазонах 0x00 - 0x1f или 0x7f -0x9f , но, как я уже сказал, это может быть истинным для любого количества файлов, включая, по крайней мере, еще один вариант ISO8859.

Другая возможность - найти определенные слова в файле на всех поддерживаемых языках и посмотреть, сможете ли вы их найти.

Так Например, найдите эквивалент английских слов "and", "but", "to", "of" и т. д. на всех поддерживаемых языках 8859-1 и посмотрите, есть ли у них большое количество вхождений в файле

Я не говорю о буквальном переводе, таком как:

English   French
-------   ------
of        de, du
and       et
the       le, la, les

, хотя это возможно. Я'

2
ответ дан 23 November 2019 в 02:00
поделиться

Действительно трудно определить, является ли это iso-8859-1. Если у вас есть текст только с 7-битными символами, который также может быть iso-8859-1, но вы не знаете. Если у вас есть 8-битные символы, то верхние символы региона также существуют в кодировках заказа. Поэтому вам придется использовать словарь, чтобы лучше угадать, какое это слово и определить, от какой буквы оно должно быть. Наконец, если вы обнаружите, что это может быть utf-8, вы уверены, что это не iso-8859-1

Кодирование - это одна из самых сложных вещей, потому что вы никогда не знаете, ничего не говорит вам

5
ответ дан 23 November 2019 в 02:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: