1

perlスクリプトを使用してファイルを読み込みますが、ファイルのエンコードがわかりません。基本的に、私のファイルは本のタイトルのリストですが、各本には他の情報(著者、発行日)が関連付けられています。 、など)。したがって、各本のタイトルは、その本の個別のデータチャンク内にあります。そのため、正規表現が見つかるまでファイルを1行ずつ繰り返し'/Book Title: (.*)/'、パレンにあるものを取得します。次に、自分の本であるテキストファイルの名前を使用して別の.txtファイルを作成します。しかし、私のUNIXサーバーでは、ファイルの名前を見ると、たとえば、実際にはそうでは'LordOfTheFlies.txt'なく、むしろ'LordOfTheFlies^M.txt'

この「^M」とは何ですか?それは私が考慮していない奇妙な行末エンコーディングですか?chompを試しましたが、機能していないようです。Perlを操作するのに最適なファイルエンコーディングは何ですか?

4

3 に答える 3

5

これは、Windowsシステムが改行文字の前に挿入する追加のキャリッジリターン文字です(M == 13番目の文字、したがってASCII13は^Mとして視覚化されます)。

それはファイルエンコーディングとは何の関係もありません、それはただあなたを噛む行終了ポリシーです。Perlは通常、行末の文字を正しく処理するのが得意ですが、行末以外の場所で発生する場合は、自分で処理する必要があります。chomp()の代わりにs / \r//を使用してそれらを取り出すことができます。

于 2010-03-01T07:44:49.277 に答える
0

ファイルを処理する前に、ファイルのプロデューサーによって決定されるファイルのエンコーディングを知る必要があります。
その「^M」は、キャリッジリターンであるcontrol-Mであり、Unixファイルシステムでは必要ありません。
ファイルはUnixで作成され、Windowsに転送されているようです。テキストファイルがバイナリとして転送されるときに、ftpで追加することもできます。

于 2010-03-01T07:46:59.537 に答える
0

'chomp'の代わりにchopを試してください。Chompは「改行文字」を削除します。s / \r//も良いです。一般的な質問としては、Perlでの生活をより簡単に、より良くするために必要なファイルタイプに適したモジュールを使用することをお勧めします。

于 2010-03-01T19:48:13.373 に答える