1

これは、 This Questionのパート 2 の質問です。

だから私は :encode 機能を試していますが、まったく運がありません。

use Encode;
use utf8;

# Should print: iso-8859-15
print "Latin-9 Encoding: ".find_encoding("latin9")->name."\n"; 

my $encUK = encode("iso-8859-15", "UK €");
print "Encoded UK: ".$encUK."\n";

結果:

Encoded UK: UK €

結果をエンコードするべきではありませんか? ここで何が間違っていますか?

編集:

提案を追加しました:

use utf8;

そして今、私はこれを取得します:

Encoded UK: UK �

今髪を抜いています :/

4

3 に答える 3

4

髪を引っ張らないでください。あなたはすべてを正しく行い、終了し、すでに意図したデータを取得しています。おそらく、Latin-9 用に設定されていないが、別のエンコーディング (おそらく UTF-8) 用に設定された端末から出力を見るため、出力は混乱します。

> perl -e'use utf8; use Encode; print encode "Latin-9", "Euro €"'
Euro �

> perl -e'use utf8; use Encode; print encode "Latin-9", "Euro €"' | hex
0000  45 75 72 6f 20 a4                                 Euro .

コードポイント A4 は、実際には Latin-9 のユーロ記号です。

于 2010-06-15T19:54:49.430 に答える
1

おそらく、スクリプトで文字を適切にエンコードしていないと思います。あなたの編集者は、そのエンコーディングは何だと思いますか?

たとえば、これを完全に回避するために、これを試しました:

use Encode;

# Should print: iso-8859-15
print "Latin-9 Encoding: ".find_encoding("latin9")->name."\n";

my $encUK = encode("iso-8859-15", "\xA3");
print "Encoded UK: ", $encUK, "\n";

出力:

 
Latin-9 エンコーディング: iso-8859-15  
エンコードされた英国: £  
于 2010-06-15T17:30:05.043 に答える
0

「utf8を使用してください。」これは、Perl 5.8以降、ソースファイルがUTF-8でエンコードされていることをPerlに通知するためにのみ使用されます。

では、ソースのエンコーディングは、Perlに伝えていることと本当に一致していますか?

'vim'を使用すると、UTF-8でファイルを書き込むためにこのオプションを使用する必要があります。

:set fenc=utf8

また、ファイルをロードするときにUTF-8を取り戻すには、.vimrcでfileencodingsを定義する必要があります。

set fileencodings=ucs-bom,utf-8,latin9
于 2010-06-17T16:44:44.380 に答える