4

ファイルのエンコードに問題があるようです。これは、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ユニコードであり、正しく表示されます。何か提案がありますか、なぜ私のブラウザ(FirefoxとChrome)がそれを表示するのに問題がありますか?タブレット(ドイツ語で設定)を使用してネイティブブラウザでチェックすると正しい結果が表示されましたが、Chromeで試してみると同じ恐ろしい/間違った出力が表示されました。エンコーディングを設定する方法はありますか?すべての環境でそれを表示すると同じ出力が表示されますか?

4

2 に答える 2

4

サーバーは、ほとんどの場合、.txtファイルをContent-Type:text / plainとして送信しますが、文字セットは送信しません。したがって、ブラウザは何か(ASCII、iso-8859-1、iso-8859-15の可能性が高い)を選択する必要があり、UTF-8バイトをガベージとして表示します。

回避策の1つは、テキストファイルを小さなPHPスクリプトでラップし、正しいエンコーディングを送信することです。

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

readfile()は、test.txtの内容を変更せずにブラウザにダンプします。

拡張子(.txt)に基づいてContent-Typeを選択するWebサーバーであることに注意してください。おそらくそれを変更することはできますが、構成ファイルを深く掘り下げる必要があります。

于 2012-11-24T01:26:11.670 に答える
1

UTF-8 テキストでは、ブラウザは使用されているエンコーディングを理解するのに苦労し、おそらくシステムのエンコーディングがデフォルトになります。ユーザーはエンコーディングを手動で変更する必要があります (たとえば、Firefox では、[表示] > [文字エンコーディング] > [Unicode (UTF-8)] -- あまり実用的なソリューションではありません)。

これを修正する 1 つの方法は、適切なメタデータを含むテキストを送信するように Web サーバーを構成することですContent-Type: text/plain; charset=utf-8(または、JvO で提案されているように PHP 経由で)。

または、検出しやすいエンコーディングでテキスト ファイルを再エンコードすることもできます。たとえば、BOM ( Byte Order Mark ) 付きの UTF-16 などです。Vim で、次の方法でファイルを保存します。

 :setlocal bomb
 :w ++enc=utf16-le
于 2012-11-24T18:31:23.313 に答える