浏览器中文本文件显示错误

Tob*_*ore 4 vim encoding google-chrome utf-8 text-files

看来我在文件编码方面遇到了麻烦。它是在 CentOS 服务器上通过 SSH 使用 vim 创建的文本文件。在浏览器中查看文件时,文件的编码存在问题。

\n\n

我创建了一个测试文件,它解释了这种行为:

\n\n

res.tobscore.com/test.txt

\n\n

这就是我希望输出的样子(这只是一个使用特殊字符来正确显示变音符号的 html 文件):

\n\n

res.tobscore.com/test.html

\n\n

在终端中使用命令 file 和 cat 会显示以下输出:

\n\n
user>file test.txt \ntest.txt: UTF-8 Unicode English text\nuser>cat test.txt \nThis is a testfile. I'm using the German Umlaute and the euro sign, to test\nthe encoding.\nEuro - \xe2\x82\xac\nScharfes S - \xc3\x9f\nAe - \xc3\x84\nOe - \xc3\x96\nUe - \xc3\x9c\n
Run Code Online (Sandbox Code Playgroud)\n\n

如您所见,它是 utf-8 unicode 并且显示正确。您有什么建议吗?为什么我的浏览器(Firefox 和 Chrome)无法显示它?使用我的平板电脑(以德语设置)用本机浏览器检查它显示了正确的结果,但是用 Chrome 尝试它显示了相同的可怕/错误的输出。\n有没有办法设置编码,以便在每个环境中显示它相同的输出?

\n

JvO*_*JvO 5

您的服务器很可能会以Content-Type: text/plain 的形式发送 .txt 文件,但没有字符集。因此,浏览器必须选择一些内容(最有可能是 ASCII、iso-8859-1 或 iso-8859-15)并将 UTF-8 字节显示为垃圾。

一种解决方法是将文本文件包装在一个小的 PHP 脚本中,并用它发送正确的编码:

<?php 
header ('Content-Type: text/plain; charset=utf-8');
readfile ('test.txt');
?> 
Run Code Online (Sandbox Code Playgroud)

readfile() 会将test.txt的内容原封不动地转储到您的浏览器。

请注意,这是根据扩展名(.txt)选择内容类型的网络服务器;您也许可以更改它,但是您必须深入研究配置文件。