Как записать символ ALT-0146 в файл XML с помощью Perl? - PullRequest
0 голосов
/ 27 мая 2011

'

Это символ, и я не могу найти способ обнаружить, заменить или правильно записать его в файл XML.Сначала я использовал конкатенацию строк, затем перешел к XML :: Writer, но он все равно не будет работать, XML все еще не работает после этого (нужно в UTF-8)

Этотест, который я написал, который все еще ломается:

    my $output = new IO::File(">$foundFilePath");
    my $writer = new XML::Writer(OUTPUT => $output);
    $writer->xmlDecl("UTF-8");
    $writer->startTag("xml");
    $writer->startTag("test");
    $writer->characters("’");
    $writer->endTag("test");
    $writer->endTag("xml");
    $writer->end();
    $output->close();

Чтобы быть более конкретным, я пытаюсь получить данные с этой страницы: http://investing.businessweek.com/businessweek/research/stocks/private/snapshot.asp?privcapId=4439466

И мистер Уильям О'Киф работаетвсе вышло.

1 Ответ

3 голосов
/ 27 мая 2011

Есть две вещи, которые вам нужно сделать.Если вы хотите записать UTF-8 в файл, вам нужно сказать так:

my $output = IO::File->new($foundFilePath, ">:utf8");

И если вы хотите использовать буквальные строки UTF-8 в своем исходном коде, вам нужно сказать

use utf8;

в начале вашей программы.В противном случае Perl предполагает, что ваш исходный код - Latin-1.

Вот полный пример сценария:

use utf8;
use strict;
use warnings;
use IO::File;
use XML::Writer;

my $foundFilePath = 'test.xml';
my $output = IO::File->new($foundFilePath, ">:utf8");
my $writer = XML::Writer->new(OUTPUT => $output);
$writer->xmlDecl("UTF-8");
$writer->startTag("xml");
$writer->startTag("test");
$writer->characters("’");
$writer->endTag("test");
$writer->endTag("xml");
$writer->end();
$output->close();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...