私はレガシープログラムを持っており、実行後にログファイルを生成します。今私はこのログファイルを分析する必要があります。どのようにユニコードに似た形式のファイルを処理するためにperlを使用しますか?
しかし、ファイル形式は非常に奇妙です。以下を参照してください、私はそれを開くためにviを使いました、それはUnicodeファイルのように見えますが、FFFEが起動していません。メモ帳を開いて保存してからもう一度開くと、FFFEがメモ帳で追加されていることがわかりました。その後、コマンド 'type log.txt> log1.txt "を使用してファイル全体をANSI形式に変換できます。後でperlで/ TDD /を使用して、必要なものを検索することができます。
今、このファイル形式を扱うことができません。
任意のコメントやアイデアは非常に理解されるであろう。
0000000: 5400 4400 4400 3e00 2000 4c00 6f00 6100 T.D.D.>. .L.o.a.
をメモ帳した後、それは
0000000: fffe 5400 4400 4400 3e00 2000 4c00 6f00 ..T.D.D.>. .L.o.
open STDIN, "< log.txt";
while(<>)
{
if (/TDD/)
{
# Add my logic.
}
}
私は非常に便利ですスレッドを読んだことがある保存、まだできません私の問題を解決してください。 How can I open a Unicode file with Perl?
回答を追加できないため、スレッドを編集します。
ありがとうございますMichael、 私はあなたのスクリプトを試しましたが、次のエラーがありました。
perl.exe open.pl utf-16le utf-16 <my log file>.txt
が、私はまだエラーを得た:私は、OSがWindows 2008
* ascii
* ascii-ctrl
* iso-8859-1
* null
* utf-8-strict
* utf8
UTF-16:Unrecognised BOM 5400 at test.pl line 12.
更新
私はコマンドを使用してUTF-16LEを試している、私のperlのバージョンは5.1で確認しましたlike
UTF-16LE:Partial character at open.pl line 18, <$fh> line 1824.
また、私はutf-16beを試してみましたが、同じe不具合私は、UTF-16を使用した場合
は、私はエラー
UTF-16:Unrecognised BOM 5400 at open.pl line 18.
open.plライン18
is "print while <$fh>;"
任意のアイデアを得たのだろうか?
更新日:2011/11/05 ご協力いただきありがとうございます。私は問題を解決しました。 ログファイルのデータは結局UTF-16ではないことがわかりました。だから、私はVisual Studioで.netプロジェクトを書く必要がありました。 UTF-16でログファイルを読み取り、UTF-8で新しいファイルに書き込みます。そして、私はファイルを解析し、結果データを生成するためにperlスクリプトを使用しました。それは今働いた。
だから、ごみのデータが多いファイルを読む方法を知っている人がいらっしゃる場合は、どうもありがとうございます。
それを開くためにゴミデータサンプル
tests.cpp:34)
吀䐀䐀㸀 䰀漀愀搀椀渀最 挀挀洀挀漀爀攀⸀搀氀
使用の六角リーダー:
0000070: a88d e590 80e4 9080 e490 80e3 b880 e280 ................
0000080: 80e4 b080 e6bc 80e6 8480 e690 80e6 a480 ................
0000090: e6b8 80e6 9c80 e280 80e6 8c80 e68c 80e6 ................
00000a0: b480 e68c 80e6 bc80 e788 80e6 9480 e2b8 ................
これは何らかの助けになるかもしれません。http://www.perlmonks.org/?node_id=615796 –
ストリームの読み込みに異なるエンコードを指定しようとしましたか? –
あなたがリンクした質問の答えは、あなたのUCS-2LEでエンコードされたファイルを読むために必要なことを正確に伝えています。私はちょうどそれを試して、それは私のために働いた。 - あなたが「解決できない」理由を特定してください。 – daxim