3

Perl で書かれた成熟した CGI アプリケーションを変更していて、コンテンツのエンコーディングの問題が発生しました。ブラウザは、コンテンツが iso-8859-1 でエンコードされていることを報告し、アプリケーションは HTTP ヘッダーの文字セットとして iso-8859-1 を宣言していますが、実際にエンコードを行っているようには見えません。perldoc チュートリアル ( EncodeEncodingOpen ) で説明されているさまざまなエンコーディング手法はコードで使用されていないため、ドキュメントが実際にどのようにエンコードされているかについて少し混乱しています。

前述のように、このアプリケーションは非常に成熟しており、現在のエンコード方法の多くよりも古い可能性があります。私が探しているレガシーまたは非推奨のテクニックを知っている人はいますか? 開発者から指示がない場合、Perl はどのエンコーディングを想定/デフォルト設定しますか?

ありがとう

4

4 に答える 4

8

デフォルトでは、Perl は文字列をバイト シーケンスとして処理するため、ファイルから読み取ってそれを STDOUT に出力すると、同じバイト シーケンスが生成されます。テンプレートが Latin-1 の場合、出力も Latin-1 になります。

テキスト文字列コンテキストで文字列を使用する場合 ( などと同様) uclc文字列が以前にデコードされていない限り、perl は Latin-1 セマンティクスを想定します。

Perl、文字セット、エンコーディングの詳細

于 2008-10-07T17:21:28.940 に答える
2

Perlは何も想定しませんが、ブラウザは通常推測に基づくエンコーディングを想定しています。エンコード技術を使用しない場合、ドキュメントは作成されたとおりに直接出力されます。

HTTPContent-Typeヘッダーで文字セットを指定できます。

于 2008-10-07T17:08:47.657 に答える
1

私が最初に見るのはサーバー構成です。プログラムでcontent-encodingヘッダーを設定していない場合は、サーバーの推測を利用している可能性があります。

サーバーとは別にスクリプトを実行して、実際の出力を確認します。サーバーがCGIプログラム(nphではない)から出力を取得すると、サーバーは、クライアントに送信する前に、欠落していると思われるもののヘッダーを修正します。

于 2009-03-26T09:28:38.157 に答える
0

ブラウザがコンテンツをiso-8859-1として報告する場合、perlスクリプトが文字セットを指定するための正しいヘッダーを出力しなかった可能性がありますか?

于 2008-10-07T17:06:27.583 に答える