如何读取文本文件内容而不会丢失perl中的字符

时间:2014-04-21 07:23:05

标签: perl text file-io unicode utf-8

我在文本文件(.txt)中有以下文字:

  

FestebendründendieIdentitätinerGemeinschaft und ihr   Selbstverständnisnachinnen。 Eng damit verbunden sind Emotionen,die   zunächstimZusammenhang miteinergefühltenZugehörigkeitzueiner   Fest-Gemeinschaft zu verstehen sind。 Mit jedem Fest verbindet sich   与众不同的情况:All bestimmende   festliche Eindruck - 死于狂热Gestimmtheit - ist der einer   erhöhtenBedeutungshaftigkeitdes Lebens,durch die sich das Festliche   aus dem Lauf des Alltagslebens hervorhebt unddessenWirkmächtigkeit   zuvörderstanhandder AnalyzedesbürgerlichenGeburtstagessinnfällig   demonstriert werden soll。

当我从.txt文件中读取此文本时,我收到的文字如下所示:

  

FestebendründendieIdentitätinerGemeinschaft und ihr   Selbstverständnisnachinnen。 Eng damit verbunden sind Emotionen,die   zunächstimZusammenhang miteinergefühltenZugehörigkeitzueiner   Fest-Gemeinschaft zu verstehen sind。 Mit jedem Fest verbindet sich   与众不同的情况:All bestimmende   festliche Eindruck die feierliche Gestimmtheit ist der einer   erhöhtenBedeutungshaftigkeitdes Lebens,durch die sich das Festliche   aus dem Lauf des Alltagslebens hervorhebt unddessenWirkmächtigkeit   zuvörderstanhandder AnalyzedesbürgerlichenGeburtstagessinnfällig   demonstriert werden soll。

你可以看到上面文本中没有出现的短划线,但是我想要(.txt)文件中的确切文本,我也使用了UTF-8但仍然没有使用短划线。

我正在寻找你的想法,以便在Perl中解决这个问题。

2 个答案:

答案 0 :(得分:0)

尝试像这样开始你的脚本:

#!/usr/bin/perl -CS

use open IO => ':utf8';

然后正常打开,读取和输出,该pragma将指示Perl对所有输入和输出使用UTF8编码,选项-CS将为STDIN启用Unicode支持,{{1 }和STDOUT

您需要通过以下方式之一运行脚本:

  1. 为其添加执行权限,并使用STDERR运行它,或
  2. 使用./script.pl
  3. 参考:
    perlrun
    open
    use utf8 gives me 'Wide character in print'


    此脚本应该能够创建this file的精确副本(使用perl -CS /path/to/script.pl进行检查)。当它运行时,diff的值应为7,它会将此变量的值打印到${^UNICODE}

    STDERR

答案 1 :(得分:0)

Perl处理你的变音符号而不是破折号的事实表明该文件使用windows-1252编码。 Perl可能假设该文件位于latin-1(ISO-8859-1),这是一种在809F之间不使用代码点的编码。 97中的N短划线windows-1252可以解释为什么Perl不会处理它。

尝试告诉Perl使用windows-1252文件和终端,the open pragma

use open qw( :encoding(windows-1252) :std );