我对 Ubuntu 还很陌生,现在需要根据具体情况同时使用 Windows 和 Ubuntu。我遇到的一个问题是,Ubuntu 似乎无法识别在 Windows 下创建的文本文件中的变音符号等(这非常重要,因为我用德语书写)。相反,我只看到一个 � 符号。这也转换为 pdftex 输出,其中这些显示为“ï¿1⁄2”。
由于此问题在 gedit 和 eclipse 中均有出现(并且通过 LaTeX 出现),因此它不可能是由查看器引起的。但它也不可能是文件编码的问题,不是吗?在 Windows 下,相同的文件可以正常工作。(但是,我不知道编码是什么,并且无法使用 gedit 和文件管理器来弄清楚。)
这种行为的原因是什么?我该如何防止它?
编辑:
输出file -i document.tex
:
document.tex: text/x-tex; charset=iso-8859-1
输出locale
:
LANG=de_DE.UTF-8
LANGUAGE=en
LC_CTYPE="de_DE.UTF-8"
LC_NUMERIC="de_DE.UTF-8"
LC_TIME="de_DE.UTF-8"
LC_COLLATE="de_DE.UTF-8"
LC_MONETARY="de_DE.UTF-8"
LC_MESSAGES="de_DE.UTF-8"
LC_PAPER="de_DE.UTF-8"
LC_NAME="de_DE.UTF-8"
LC_ADDRESS="de_DE.UTF-8"
LC_TELEPHONE="de_DE.UTF-8"
LC_MEASUREMENT="de_DE.UTF-8"
LC_IDENTIFICATION="de_DE.UTF-8"
LC_ALL=
答案1
问题在于文件使用的是iso-8859-1
无法识别变音符号的编码。最简单的解决方案是更改文件的编码:
iconv -f iso-8859-1 -t utf8 document.tex > newdoc.tex
要对当前目录中的所有 tex 文件执行此操作,请运行以下命令:
for f in *tex; do mv "$f" "$f".bak && iconv -f iso-8859-1 -t utf8 "$f".bak > "$f"; done
上述命令首先将每个.tex
文件重命名为filename.tex.bak
,然后更改副本的编码并将其保存为filename.tex
。因此,如果您有一个名为 的文件foo.tex
,那么您最终将得到一个名为 的文件,该文件foo.bak.tex
具有原始编码,而 则foo.tex
具有 UTF8 编码。
您可能遇到的另一个问题是 Windows 使用\r\n
作为行尾,而 Linux 等则\n
单独使用。因此,在 Linux 上工作时,您可能希望更改此设置。要将 Windows 行尾转换为 Unix 样式,请执行以下操作
sed -i 's/\r//g' filename