我正在尝试将一些UTF-8字符输入到TextMate中的LaTeX文件中(其默认编码为UTF-8),但LaTeX似乎并不理解它们.Running cat my_file.tex
在Terminal中正确显示字符.跑步ls -al
显示我以前从未见过的东西:文件列表中的"@":
-rw-r--r--@ 1 me users 2021 Feb 11 18:05 my_file.tex
(而且,是的,我正在使用\usepackage[utf8]{inputenc}
LaTeX.)
我发现了iconv
,但似乎无法告诉我编码是什么 - 它只会在我弄清楚之后转换.
-I
在文件命令上使用(即大写i)选项似乎显示文件编码.
file -I {filename}
在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
这@
意味着该文件具有与之关联的扩展文件属性.您可以使用该getxattr()
功能查询它们.
没有明确的方法来检测文件的编码.阅读这个答案,它解释了原因.
有一个命令行工具enca,它试图猜测编码.你可能想看一下.
您还可以使用以下命令从一种文件类型转换为另一种文件:
iconv -f original_charset -t new_charset originalfile > newfile
例如
iconv -f utf-16le -t utf-8 file1.txt > file2.txt
vim -c 'execute "silent !echo " . &fileencoding | q' {filename}
在我的bash配置中别名为
alias vic="vim -c 'execute \"silent !echo \" . &fileencoding | q'"
所以我只是输入
vic {filename}
在我的vanilla OSX Yosemite上,它产生比"file -I"更精确的结果:
$ file -I pdfs/udocument0.pdf pdfs/udocument0.pdf: application/pdf; charset=binary $ vic pdfs/udocument0.pdf latin1 $ $ file -I pdfs/t0.pdf pdfs/t0.pdf: application/pdf; charset=us-ascii $ vic pdfs/t0.pdf utf-8
只需使用:
file -I
而已.
使用file
带有--mime-encoding
选项(例如file --mime-encoding some_file.txt
)而不是-I选项的命令可以在OS X上运行,并且具有省略mime类型"text/plain"的额外好处,您可能不关心它.