Преобразование текстовых файлов из ASCII в Unicode без использования команд

Преобразование текстовых файлов из ASCII в Unicode без использования команд

Почему файлы в кодировке ASCII расширяются до UTF-8 или наоборот сокращаются до ASCII?

user:~$ echo 'A  B  C  |  }  ~' > ./file 
user:~$ 
user:~$ file --brief --mime ./file
text/plain; charset=us-ascii
user:~$ 
user:~$ 
user:~$ echo 'ᴁ  ♫  ⼌  

решение1

Мне кажется, вы путаете «кодировку» и «наборы символов».

В первом случае файл содержит только символы, встречающиеся в US-ASCII. Это означает, что файл будет выглядеть одинаково, независимо от того, какие языковые настройки вы используете для его отображения.

Во втором случае файл теперь содержит символы, принадлежащие кодировке UTF8, поскольку именно ее вы в него вставили.

Здесь не происходит никакого преобразования; команда просто информирует вас о содержимом файла.

решение2

Команда fileпросто угадывает, что находится в файлах, которые вы ей анализируете. Она выполняет анализ, считывая определенное количество байтов из заголовка файла, иногда в многошаговом процессе (если она находит какой-то четкий маркер в начале). В неструктурированном текстовом файле она, безусловно, считывает больше символов, чем есть в вашем расширенном ./file, поэтому она анализирует все символы.

Во втором примере вы помещаете в файл некоторые символы utf-8 и на основе этого fileзавершаете этот файл, используя utf-8набор символов. Если у вас, например, есть файл размером 900 Кб, содержащий только символы ASCII, и вы добавляете свою эхо-строку 'utf-8', fileон все равно будет сообщать о файле в кодировке ascii, потому что он не считывается до символов в кодировке utf-8.

Порог лежит где-то около 100Кб.

Связанный контент