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

问题描述:

我在编译文件时遇到了麻烦,好像。这是一个在CentOS服务器上通过SSH使用vim创建的文本文件。在浏览器中查看文件时,文件的编码存在问题。浏览器中文本文件的显示错误

我创建了一个testfile的,这也解释了这种行为:

res.tobscore.com/test.txt

这就是我所要的输出是这样(这是仅使用HTML文件特殊字符,以显示正确umlaute):

res.tobscore.com/test.html

使用在终端命令文件和猫呈现下面的输出:

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浏览器显示相同的可怕/错误输出。 有没有办法设置编码,所以在每个环境中显示它会呈现相同的输出?

您的服务器很可能会将.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的Web服务器;你可以改变它,但是你必须深入挖掘配置文件。

使用UTF-8文本,浏览器很难找出使用的编码,并且可能默认使用系统的编码。用户将不得不手动更改编码(例如在Firefox中,查看>字符编码> Unicode(UTF-8) - 不是一个非常可行的解决方案)。

解决此问题的一种方法是将Web服务器配置为使用正确的Content-Type: text/plain; charset=utf-8元数据(或通过PHP,如JvO所建议的)发送文本。或者,您可以尝试使用易于检测的编码重新编码文本文件,例如,带有BOM的UTF-16(字节顺序标记)。在Vim中,通过以下方式保存文件:

:setlocal bomb 
:w ++enc=utf16-le