我似乎遇到了文件编码问题。它是在CentOS服务器上通过SSH使用vim创建的文本文件。在浏览器中查看文件时,文件编码存在问题。
我创建了一个测试文件,它解释了这种行为:
res.tobscore.com/test.txt
这就是我想要输出的样子(这只是一个使用特殊字符的html文件来正确显示变音符号):
res.tobscore.com/test.html
使用终端中的命令文件和cat显示以下输出:
user>file test.txt
test.txt: UTF-8 Unicode English text
user>cat test.txt
This is a testfile. I'm using the German Umlaute and the euro sign, to test
the encoding.
Euro - €
Scharfes S - ß
Ae - Ä
Oe - Ö
Ue - Ü
正如您所看到的那样,它是utf-8 unicode并且显示正确。您有什么建议,为什么我的浏览器(Firefox和Chrome)无法显示它?使用我的平板电脑(德语设置)使用本机浏览器检查显示正确的结果,但尝试使用Chrome显示相同的可怕/错误输出。 有没有办法设置编码,所以在每个环境中显示它会产生相同的输出?
答案 0 :(得分:3)
您的服务器很可能会将.txt文件作为 Content-Type:text / plain 发送,但不会发送字符集。因此,浏览器必须选择一些东西(很可能是ASCII,iso-8859-1或iso-8859-15),并将UTF-8字节显示为垃圾。
一种解决方法是将文本文件包装在一个小PHP脚本中,并使用它发送正确的编码:
<?php
header ('Content-Type: text/plain; charset=utf-8');
readfile ('test.txt');
?>
readfile()会将 test.txt 的内容转储到您的浏览器中。
请注意,是基于扩展名(.txt)选择Content-Type的网络服务器;你可以改变它,但你必须深入挖掘配置文件。
答案 1 :(得分:0)
使用UTF-8文本,浏览器很难确定使用的编码,并且可能默认为系统的编码。用户必须手动更改编码(例如,在Firefox中,查看&gt;字符编码&gt; Unicode(UTF-8) - 这不是一个非常可行的解决方案)。
解决此问题的一种方法是将Web服务器配置为使用正确的Content-Type: text/plain; charset=utf-8
元数据(或通过PHP,如JvO建议)发送文本。
或者,您可以尝试使用更易于检测的编码重新编码文本文件,例如带BOM的UTF-16(字节顺序标记)。在Vim中,通过以下方式保存文件:
:setlocal bomb
:w ++enc=utf16-le