当我在文件上运行perl脚本时,我没有得到kannada文本

时间:2014-03-11 17:46:16

标签: perl

我有以下代码用于从html文件中提取文本并写入文本文件。在HTML中它包含kannada文本(utf-8)当程序运行时,我得到一个文本文件,我得到文本,但它没有正确的合成。文字是难以理解的格式

enter code here
use utf8;
use HTML::FormatText;
my $string = HTML::FormatText->format_file(
'a.html',
leftmargin => 0, rightmargin => 50
);
open mm,">t1.txt";
print mm "$string";

所以请帮助我。我们在处理时处理文件格式。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望输出文件采用UTF-8编码,以便Kannada语言中的字符在输出中正确编码。您的代码可能正在尝试(并且失败)错误地编码到ISO-8859-1中。

如果是这样,那么你可以做的是确保你的文件是用UTF-8编码过滤器打开的。

use HTML::FormatText;

open my $htmlfh, '<:encoding(UTF-8)', 'a.html' or die "cannot open a.html: $!";
my $content = do { local $/; <$htmlfh> }; # read all content from file
close $htmlfh;

my $string = HTML::FormatText->format_string(
    $content,
    leftmargin => 0, rightmargin => 50
);

open my $mm, '>:encoding(UTF-8)', 't1.txt' or die "cannot open t1.txt: $!";
print $mm $string;

如需进一步阅读,建议您查看以下文档:

其他几点说明:

  • use utf8行只会使您的Perl脚本/库可能包含UTF格式。它不会对您如何读取或写入文件进行任何更改。
  • 避免在示例中使用open()的双参数形式。在某些情况下,它可能允许恶意用户破坏您的系统。 (尽管如此,您在此示例中的用法恰好是安全的。
  • 打开文件时,需要先添加or die,否则将无声读取或写入文件。

更新3/12:我将其更改为以UTF-8读取文件并将其发送至HTML::FormatText。如果您的a.html文件在开始时以BOM字符保存,则无论如何它可能已经做了正确的事情,但是这应该使它总是假定传入文件为UTF-8。