Perl 打开和保存文件时丢失编码

Perl 打开和保存文件时丢失编码,perl,unicode,encoding,Perl,Unicode,Encoding,我正试图打开一个包含常规HTML和特殊Unicode字符(如“ÖÄääå”(瑞典语)的文件,对其进行格式化,然后将其输出到文件中 到目前为止,一切都很顺利,我可以打开文件,找到我需要的部分并输出到一个文件中 但关键是: 我无法在不丢失编码的情况下将输入的Unicode数据保存到文件中(例如,“ö”变为“Ô) 尽管我可以通过手动将它们输入到代码本身中,设法执行regex并将它们输出到正确的编码中。但当我导入一个文件,格式化它,然后输出时,情况就不一样了 使用OCT时的工作方法示例(例如,这可以输

我正试图打开一个包含常规HTML和特殊Unicode字符(如“ÖÄääå”(瑞典语)的文件,对其进行格式化,然后将其输出到文件中

到目前为止,一切都很顺利,我可以打开文件,找到我需要的部分并输出到一个文件中

但关键是:

我无法在不丢失编码的情况下将输入的Unicode数据保存到文件中(例如,“ö”变为“Ô)

尽管我可以通过手动将它们输入到代码本身中,设法执行regex并将它们输出到正确的编码中。但当我导入一个文件,格式化它,然后输出时,情况就不一样了

使用OCT时的工作方法示例(例如,这可以输出到文件而不存在编码问题):

下面的方法不起作用,因为编码丢失(这是代码部分的快速说明,但其概念是相同的[例如打开文件、获取和输出]):

open(FH,'swedish.htm')或die(“文件无法打开”);
while()
{
my@List=/([$SwedishLetters]+)/g;
消息($List[0]),如果@List;
}
关闭(FH);
使用编码;
打开文件1,“:encoding(UTF-8)”、“output.htm”或die$!;

您可能需要使用不同的编码。

什么格式被破坏?你正在丢失空白?不,我的意思是我的角色失去了他们的“真实形式”,例如anö变成了aè等等。”<:encoding(UTF-8)“解决了,尽管给你投票支持提示。谢谢如果输入是从实际的瑞典网页上刮取的,则编码可能是UTF-8或ISO-8859-1。@Alexander这只是一个让您继续的示例:)。很乐意帮忙!
使用utf8
在那里没有任何用处。该模块所做的一切都是为了告诉perl源代码中有utf8字符,但这里的情况并非如此。看见
my $charsSWE = "öäåÅÄÖ";
# \344 = ä
# \345 = å
# \305 = Å
# \304 = Ä
# \326 = Ö
# \366 = ö
my $SwedishLetters = '\344 \345 \305 \304 \326 \366';

if($charsSWE =~ /([$SwedishLetters]+)/){
    print "Output: $1\n";
}
open(FH, 'swedish.htm') or die("File could not be opened");

    while(<FH>)
    {
        my @List =  /([$SwedishLetters]+)/g;    
        message($List[0]) if @List;
    }

close(FH);
use Encode;

open FILE1, "<:encoding(UTF-8)", "swedish.htm" or die $!;

#do stuff

open FILE2, ">:encoding(UTF-8)", "output.htm" or die $!;