これは本当に困った問題なので、私が何を間違っているのか誰か教えてほしいです。私は、暇なときにやっていたプログラミングをテストするために、しばらくの間、Windows 7 ラップトップで Apache Web サーバーを実行していました。最近、ページ内の Unicode 文字がブラウザーで正しく表示されないことに気付きました。結局、無意味なテストをたくさん実行したところ、文字は正しい UTF-8 として送信されていることがわかりました。また、<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
HTML 出力の先頭に 1 行追加しましたが、これは問題を解決するはずでしたが、実際には何もしませんでした。その後、HTTP 応答ヘッダーをチェックして、Apache が次のように返していることを確認しました。
HTTP/1.1 200 OK 日付: 2015 年 7 月 19 日 (日) 18:18:40 GMT サーバー: Apache/2.2.25 (Win32) 転送エンコーディング: チャンク コンテンツタイプ: text/html; 文字セット=iso-8859-1
わかりました。これはかなり単純な問題のようです。インターネットによると、AddDefaultCharset utf-8
httpd.conf ファイルに追加することで修正できるそうです。AddDefaultCharset
ファイルにはどこにも行がなかったので、上記のとおりに一番下に追加しました。その後、Apache サービスを再起動しましたが、問題は変わっていませんでした。Apache を正しく再起動する方法がわからないかもしれないと思い、コンピューターを再起動しましたが、それでも文字が正しく表示されず、charset=iso-8859-1
ヘッダーが送信され続けます。
また、Windows VirtualStore と呼ばれる何かが、私を困らせるために構成ファイルを別の場所に自動的に保存している可能性があると示唆する Web サイトも見つけましたが、VirtualStore ディレクトリに Apache ファイルが見つからないため、これが起こっているとは思えません。また、フォルダーの所有権を取得することで VirtualStore を無効にできるはずですが、それ以外では何も変更できなかったため、しばらく前にそれを実行しました。
残念ながら、この問題について他に何を調べればよいのかさえわかりません。何かアイデアはありますか?
答え1
3 行の HTML ファイルを作成し、ブラウザからリクエストして、ヘッダーを確認してください。これにより、CGI ヘッダーやサーバー構成に干渉するものがないことを確認できます。
<html><head><title>Some Test file</title></head>
<body>unicode test äöüÄÖÜß</body>
</html>
charset=utf-8
このファイルがContent-type ヘッダーの仕様とともに送信されるまで、サーバー構成を操作し続けます。
次に、最小限の Perl プログラムを試してください。
#!/usr/bin/perl <-- or omit this line as you're on windows
binmode(STDOUT, ":utf8");
print qq(Content-type: text/html; charset=utf-8
<html><head><title>Some Test file</title></head>
<body>unicode test äöüÄÖÜß</body>
</html>
);
これが機能する場合 (正しいヘッダーが送信される場合)、機能しないその他の問題はサーバー構成ではなくライブラリにあります。