Perl和读取具有不同编码的文件

Ton*_*ark 1 perl input file-encodings

我使用perl脚本读取文件,但我不确定该文件的编码方式.基本上,我的文件是书名列表,但每本书都有其他相关信息(作者,出版日期)等).因此,每本书的标题都在书的一个独立的数据块中.所以我逐行遍历文件,直到找到正则表达式'/Book Title: (.*)/'并取出paren中的内容.然后,我创建一个单独的.txt文件,其文本文件的名称是我的书.但是,在我的unix服务器中,当我查看文件的名称时,实际上并不是,例如,'LordOfTheFlies.txt'而是'LordOfTheFlies^M.txt'

这是什么'^ M'?这是一个奇怪的行编码结束我没有考虑到?我尝试了chomp但它似乎没有工作.使用perl的最佳文件编码是什么?

Kil*_*oth 5

它是Windows系统在换行符之前插入的附加回车符(M ==第13个字母,因此ASCII 13可视化为^ M).

它与文件编码无关,它只是咬你的行结束策略.Perl通常擅长正确处理行结尾字符,但如果它们出现在除行尾之外的其他地方,则必须自己完成.您可以使用s /\_ //而不是chomp()来取出它们.