Потеря кодировки при открытии и сохранении файла - PullRequest
2 голосов
/ 07 декабря 2011

Я пытаюсь открыть файл с обычным 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";
}

Способ ниже не работает, потому что кодировка потеряна (это быстрая иллюстрация части кода, но ее концепция та же самая (например, открытый файл, выборка и вывод)):

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

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

close(FH);

1 Ответ

7 голосов
/ 07 декабря 2011
use Encode;

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

#do stuff

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

Возможно, вам потребуется использовать другую кодировку.

...