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

Ale*_*der 2 unicode perl encoding

我正在尝试使用常规HTML和特殊Unicode字符(例如"ÖÄÅöäå"(瑞典语))打开文件,对其进行格式化,然后将其输出到文件中.

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

但重点是:

我无法将输入的Unicode数据保存到文件中而不会丢失我的编码(例如,'ö'变成'Ã'').

虽然我可以通过手动将它们输入到代码本身,但仍然可以执行正则表达式并将它们输出到正确的编码.但不是在我导入文件,格式化然后输出时.

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

my $charsSWE = "öäåÅÄÖ";
# \344 = ä
# \345 = å
# \305 = Å
# \304 = Ä
# \326 = Ö
# \366 = ö
my $SwedishLetters = '\344 \345 \305 \304 \326 \366';

if($charsSWE =~ /([$SwedishLetters]+)/){
    print "Output: $1\n";
}
Run Code Online (Sandbox Code Playgroud)

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

open(FH, 'swedish.htm') or die("File could not be opened");

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

close(FH);
Run Code Online (Sandbox Code Playgroud)

Fai*_*Dev 7

use Encode;

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

#do stuff

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

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