2017-08-24 9 views
-1

*TXT ASCII以外の文字を持つファイルがあります。 é ê ù。ただし、*TXTファイルモードはANSI(デフォルトモード)です。PerlはASCII以外の文字を認識しません

私はPerlで非ASCII文字を読み取ってhexadecimal entitiesに変換するためにutf8を使用しています。 ANSIモードを備えた*TXTファイルはその後、Perlが動作しない場合

問題がある、しかし*TXTモードでは、スクリプトは問題なく働いているutf8です。

たPerl:

use open ':encoding(utf8)'; 
binmode STDOUT, ':utf8'; 

... 


#assume $amatch contains non-ascii characters 
$amatch = ord($amatch); 
$amatch = sprintf("&#x%x;", $amatch); 

誰もがこのためのソリューションを持っていますか?

+0

とは対照的に、

use Win32 qw(); my $ansi_enc = "cp".Win32::GetACP(); open(my $fh, "<:encoding($ansi_enc)", $qfn) # File encoded using machine's ANSI encoding. 

あなたはどのように開いて表示し、特定のファイルからデータを読み取ることはありません。しかし、STDINからコードの最初の行に明示的に設定すると、データがUTF8でエンコードされていると表示されます。この場合、データがUTF8でエンコードされていないと失敗します。 –

+0

私は確信していると確信しています – ssr1012

+0

ヒント:よく使われるエンコーディングの名前は "UTF-8"です。 「UTF8」はあなたが望まないものです。 – ikegami

答えて

2

もしそれがUTF-8でないなら、あなたがPerlにUTF-8と言うなら、それはうまくいきません!

マシンの "ANSI"エンコーディングは、Win32::GetACP()によって返された数字の前にcpを付けることで取得できます。

open(my $fh, "<:encoding(UTF-8)", $qfn) # File encoded using UTF-8. 
+0

asciiを見つけてUnicodeエンティティに変換するにはどうすればいいですか? – ssr1012

+0

while($ tmp =〜m/[^ [:ascii:]]/sg){print ":$ &\n";}' – ssr1012

+0

あなたはこれを助けてくれますか? – ssr1012

関連する問題