Ubuntu 无法识别 Windows 文本文件中的变音符号

Ubuntu 无法识别 Windows 文本文件中的变音符号

我对 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

相关内容