Я пытаюсь ввести некоторые символы UTF-8 в файл LaTeX в TextMate (который говорит, что его кодировка по умолчанию - UTF-8), но LaTeX, кажется, не понимает их.
Запуск cat my_file.tex
показывает символы правильно в терминале. Запуск ls -al
показывает то, что я никогда раньше не видел: «@» в списке файлов:
-rw-r--r--@ 1 me users 2021 Feb 11 18:05 my_file.tex
(И да, я использую \usepackage[utf8]{inputenc}
в LaTeX.)
Я обнаружил iconv
, но это, кажется, не в состоянии сказать мне, что такое кодировка - она преобразуется только после того, как я это выясню.
Ответы:
В
@
означает , что файл имеет расширенные атрибуты файлов , связанных с ним. Вы можете запросить их, используяgetxattr()
функцию.Нет определенного способа определить кодировку файла. Прочтите этот ответ, он объясняет почему.
Есть инструмент командной строки, enca , который пытается угадать кодировку. Вы можете проверить это.
источник
@
включают атрибут кодировки файла. Вы можете использовать командуxattr -p com.apple.TextEncoding <filename>
для просмотра атрибута кодировки, если он существует.ls -l@ <filename>
чтобы увидеть, какие атрибуты установлены для файла. Чтобы увидеть фактический атрибут, напечатайтеxattr -p com.apple.TextEncoding <filename>
enca
,brew install enca
и вы должны указать язык, но ни один не работает, так:enca FILENAME -L __
Использование
-I
опции (это заглавная буква i) в команде file, похоже, показывает кодировку файла.источник
file -I *
кажется, отлично работает для меня (на OSX). Система жаловалась на кодировку одного из множества файлов, не указывая, какой именно. Все файлы были ascii, кроме одного, который был utf-8. Скорее всего виновник.В Mac OS X команда
file -I
(заглавная i) даст вам правильный набор символов, при условии, что тестируемый файл содержит символы вне основного диапазона ASCII.Например, если вы заходите в Терминал и используете vi для создания файла, например.
vi test.txt
затем вставьте несколько символов и вставьте символ с акцентом (попробуйте ALT-e, а затем e), затем сохраните файл.Они печатают,
file -I text.txt
и вы должны получить такой результат:test.txt: text/plain; charset=utf-8
источник
file
командаus-ascii
где-то в моей конфигурации bash
так что я просто набираю
На моем ванильном OSX Yosemite он дает более точные результаты, чем "file -I":
источник
Вы также можете конвертировать из одного типа файла в другой, используя следующую команду:
например
источник
Просто используйте:
Вот и все.
источник
file -I
достается мнеtext/plain; charset=unknown-8bit
. Хотя это работает лучше файл utf8:text/plain; charset=utf-8
.Использование
file
команды с--mime-encoding
параметром (напримерfile --mime-encoding some_file.txt
) вместо параметра -I работает в OS X и имеет дополнительное преимущество, заключающееся в исключении типа mime, «text / plain», который вам, вероятно, не важен.источник
file
команде. Не знал, что он существует. Новичек. Тем не мение. Извините за понижение. ТАК не позволит мне отменить это, если кто-то не редактирует этот ответ.Классический 8-битный LaTeX очень ограничен, в котором могут использоваться символы UTF8; это сильно зависит от кодировки шрифта, который вы используете, и от того, какие глифы у этого шрифта есть в наличии.
Поскольку вы не приводите конкретный пример, трудно точно определить, в чем проблема - пытаетесь ли вы использовать глиф, которого нет в вашем шрифте, или не используете правильную кодировку шрифта в первом место.
Вот минимальный пример, показывающий, как несколько символов UTF8 могут использоваться в документе LaTeX:
Возможно, вам повезет больше с кодировкой [utf8x], но следует немного предупредить, что она больше не поддерживается и имеет некоторые отличительные особенности по сравнению с [utf8] (насколько я помню; прошло некоторое время с тех пор, как я на нее смотрел). Но если это поможет, это все, что важно для вас.
источник
Знак @ означает, что файл имеет расширенные атрибуты .
xattr file
показывает, какие атрибуты у него есть, такжеxattr -l file
показывает значения атрибутов (которые иногда могут быть большими - попробуйте, например,xattr /System/Library/Fonts/HelveLTMM
увидеть шрифт старого стиля, который существует в ветке ресурсов).источник
Набрав
file myfile.tex
в терминале, иногда можно узнать кодировку и тип файла, используя серию алгоритмов и магических чисел. Это довольно полезно, но не полагайтесь на него, предоставляя конкретную или надежную информацию.Localizable.strings
Файл (находится в локализованных приложений Mac OS X) , как правило , сообщается, UTF-16 исходный файл C.источник
Synalyze It! позволяет сравнивать текст или байты во всех кодировках, которые предлагает библиотека ICU . Используя эту функцию, вы обычно сразу видите, какая кодовая страница имеет смысл для ваших данных.
источник
Вы можете попробовать загрузить файл в окно Firefox, а затем перейти к View - Character Encoding. Рядом с типом кодировки файла должна стоять галочка.
источник
Какой латекс вы используете? Когда я использовал teTeX, мне пришлось вручную загрузить пакет Unicode и добавить его в мои файлы .tex:
Теперь я перешел на XeTeX из пакета TeXlive 2008 ( здесь ), это еще проще:
Что касается обнаружения кодировки файла, вы можете поиграть с ней
file(1)
(но она довольно ограничена), но, как сказал кто-то другой, это сложно.источник
Простой способ проверить кодировку может быть просто проверить файл в шестнадцатеричном редакторе или аналогичном. (или напишите программу для проверки) Посмотрите на двоичные данные в файле. Формат UTF-8 довольно легко распознать. Все символы ASCII представляют собой отдельные байты со значениями ниже 128 (0x80). Многобайтовые последовательности следуют шаблону, показанному в статье вики.
Если вы можете найти более простой способ заставить программу проверять кодировку для вас, это, очевидно, быстрый путь, но если все остальное не поможет, это поможет.
источник
Я реализовал скрипт bash ниже, он работает для меня.
Сначала он пытается
iconv
из кодировки, возвращаемойfile --mime-encoding
вutf-8
.Если это не удается, он проходит через все кодировки и показывает разницу между исходным и перекодированным файлом. Он пропускает кодировки, которые производят большой вывод различий («большой», как определено
MAX_DIFF_LINES
переменной или вторым входным аргументом), так как это, скорее всего, неправильная кодировка.Если в результате использования этого скрипта произойдут «плохие вещи», не вините меня. Там
rm -f
есть и монстры. Я пытался предотвратить негативные последствия, используя его для файлов со случайным суффиксом, но я не даю никаких обещаний.Проверено на Дарвине 15.6.0.
источник