2011-12-06 15 views
2

通常のHTMLと "ÖÄÅöäå"(スウェーデン語)のような特殊なUnicode文字でファイルを開き、フォーマットしてファイルに出力しようとしています。ファイルを開いて保存するときにエンコードが失われる

これまでのところすべてがうまくいきました。ファイルを開いて、必要な部分を見つけてファイルに出力できます。ここ

しかし、ポイントは次のとおりです。

私は(たとえば、「ö」が「ö」になります。)私のエンコーディングを失うことなく、ファイルに入力されたUnicodeデータを保存することはできません。

私は、コード自体に手動で入力することで、正規表現を実行し、それらを出力してエンコードを修正することができます。しかし、私がファイルをインポートしているときにフォーマットしてから出力しないでください。

(エンコーディング問題のないファイルに例えば、この出力することができる。)OCTを使用する際のアプローチを作業の例:エンコーディングが失われているので、以下の

my $charsSWE = "öäåÅÄÖ"; 
# \344 = ä 
# \345 = å 
# \305 = Å 
# \304 = Ä 
# \326 = Ö 
# \366 = ö 
my $SwedishLetters = '\344 \345 \305 \304 \326 \366'; 

if($charsSWE =~ /([$SwedishLetters]+)/){ 
    print "Output: $1\n"; 
} 

方法は動作しません(これは、迅速な実例であります)コードの一部のが、その概念は同じである[例えば、開いているファイル、フェッチして出力。]:

open(FH, 'swedish.htm') or die("File could not be opened"); 

    while(<FH>) 
    { 
     my @List = /([$SwedishLetters]+)/g;  
     message($List[0]) if @List; 
    } 

close(FH); 
+0

どのフォーマットが中断していますか?あなたは空白を失っていますか? –

+0

いいえ、私は自分のキャラクターが "真のフォーム"を失うことを意味しました。例えば、öは¶になります。 – Alexander

答えて

7
use Encode; 

open FILE1, "<:encoding(UTF-8)", "swedish.htm" or die $!; 

#do stuff 

open FILE2, ">:encoding(UTF-8)", "output.htm" or die $!; 

あなたが別のエンコーディングを使用する必要があります。

+0

"<:encoding(UTF-8)"はうまくいきましたが、ヒントのためにあなたにアップヴォートを与えました。ありがとう! – Alexander

+0

入力が実際のスウェーデンのWebページから削除された場合、エンコードはおそらくUTF-8またはISO-8859-1です。 – mob

+0

@Alexanderそれはちょうどあなたを得るための例だった:)。助けてうれしい! – FailedDev

関連する問題