Ввод символов UTF-8 в Excel с помощью Perl? - PullRequest
2 голосов
/ 15 февраля 2011

У меня есть XML-документы, содержащие много символов UTF-8, такие как «É» и «é», и я пытаюсь поместить их в Excel, но есть кое-что с кодировкой, которую я просто не получаю.Я использую Win32 :: OLE, чтобы поместить данные в Excel.

Я пробовал это:

use Unicode::String qw(utf8 latin1 utf16le);
my $u = utf8($content);
$output = $u->utf16le;

, но единственное, что отображается в ячейках Excel, это первый символстрока (правильно закодированная).Что я тут не так делаю?

Ответы [ 2 ]

4 голосов
/ 16 февраля 2011

Вам необходимо включить кодирование utf8 с помощью вызова Win32::OLE->Option.Код ниже работает для меня (для символов Восточной Европы):

use utf8;
use Win32::OLE qw(CP_UTF8);

Win32::OLE->Option(CP => CP_UTF8);      # set utf8 encoding

my $excel = Win32::OLE->new('Excel.Application') or die $!;
$excel->{Visible} = 1;

my $wb    = $excel->Workbooks->Add;
my $sheet = $wb->Sheets(1);

$sheet->Range('A1')->{Value} = 'Nějaký český text ďťň';
2 голосов
/ 15 февраля 2011

Кажется, я понял почему. Я просто попробовал:

$output = $u->latin1;

, и это сработало отлично, поэтому я предполагаю, что именно это использует Excel. Часть, показывающая только первый символ, вероятно, была вызвана тем, что в utf-16 каждый символ заканчивается нулевым символом \ 0, сообщающим Excel, что это вся строка. (это только предположение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...