【问题标题】:Perl and reading files with different encodingsPerl 和读取不同编码的文件
【发布时间】:2010-03-01 07:35:27
【问题描述】:

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

这个'^M'是什么?这是我没有考虑到的奇怪的行尾编码吗?我试过 chomp 但它似乎没有用。使用 perl 的最佳文件编码是什么?

【问题讨论】:

    标签: perl input file-encodings


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      在处理文件之前,你需要知道文件的编码,这是由文件的生产者决定的。
      "^M" 是 control-M,它是一个回车,在 Unix 文件系统中不需要。
      看起来该文件是在 Unix 中创建并传输到 Windows 的。当文本文件作为二进制文件传输时,它也可以与 ftp 一起添加。

      【讨论】:

        【解决方案3】:

        尝试剁碎,而不是“剁碎”。 Chomp 删除了“换行符”。 s/\r// 也不错。 对于您的一般问题,您可能希望针对您必须使用 Perl 使您的生活更轻松、更好的文件类型使用适当的模块。

        【讨论】:

          猜你喜欢
          • 2016-03-05
          • 2011-01-14
          • 1970-01-01
          • 2011-09-03
          • 2017-11-12
          • 1970-01-01
          • 2015-02-02
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多