4

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

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

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

4

2 回答 2

4

您的服务器很可能会将 .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 的网络服务器;您可能可以更改它,但您必须深入研究配置文件。

于 2012-11-24T01:26:11.670 回答
1

对于 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
于 2012-11-24T18:31:23.313 回答