2

サンプル コード スニペットを次に示します。

my $str = '21156_MLA Ã Copy4.ens';

$strコードでこれを使用しており、 として表示されるはず21156_MLA ß Copy4.ensです。

ファイル名 のファイルをアップロードしています21156_MLA ß Copy4.ensが、ブラウザの表示では21156_MLA Ã Copy4.ens. データベースでは として適切に保存されますßが、DB から ( を使用してfetchall_hashref) 取得すると、 に変換されÃます。続いてブラウザでの表示は21156_MLA Ã Copy4.ens. ここでこの変換を回避するにはどうすればよいですか?

4

3 に答える 3

1

ソース コード ファイルが UTF-8 としてエンコードされている場合は、次を指定する必要があります。

use utf8;

ソース コード ファイルで、UTF-8 の文字列がソースに埋め込まれている可能性があることをインタープリターに伝えます。

http://perldoc.perl.org/utf8.htmlを参照してください

于 2013-01-22T09:31:38.960 に答える
1

以下のモジュールを確認してください。彼らはあなたが必要とする情報を持っています:

https://metacpan.org/pod/Encode

https://metacpan.org/pod/MIME::QuotedPrint

これまでに試したことを投稿していないので、最初からコードを書くつもりはありません。ただし、上記のperlモジュールのドキュメントを確認してください。情報があります。

于 2013-01-22T07:54:13.677 に答える
1

まず、PP が指摘しているように、ソース ファイルが UTF-8 でエンコードされている場合、use utf8;Perl がそれを認識し、その中の文字列リテラルを正しく解釈できるようにする必要があります。

次に、データベース内のテキストも正しくエンコードされていることを確認します。これの詳細はデータベースによって異なりますが、たとえば MySQL の場合、テキスト列にutf8文字セットutf8_unicode_ci照合(または必要に応じて適切な国内照合スキーム) があることを確認し、mysql_enable_utf8オプションを含めることがおそらく最善の方法です。 DBI を使用してデータベースに接続する場合。

3 番目に、I/O ストリームも UTF-8 でエンコードする必要があることを Perl に伝える必要があります。次のように、 を使用してこれを行うことができますbinmode()

binmode STDOUT, ':utf8';

最後に、ブラウザに UTF-8 テキストを送信していることを伝える必要もあります。(この部分が実際の問題だと思いますが、他のすべての手順も実行すると、完全に Unicode 対応のワークフローを実現できます。) これを行うには、HTTP ヘッダーを送信します。

Content-Type: text/html; charset=UTF-8

および/または同等の HTML メタ タグ:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

または、HTML5 では単純に:

<meta charset="utf-8">
于 2013-01-22T11:07:04.353 に答える