我Spreadsheet::ParseExcel用来解析Excel电子表格文件,如下所示
my $FileName = "../excel.xls";
my $parser = Spreadsheet::ParseExcel->new();
my $workbook = $parser->parse($FileName);
Run Code Online (Sandbox Code Playgroud)
并从这样的细胞中读取值
$product = $worksheeto->get_cell( $row, 0 )->value();
Run Code Online (Sandbox Code Playgroud)
问题在于,例如,当有法国字符时à,它会显示出来ò
为了确保我使用的解析没有错误
print unpack('H*', $product) . "\n";
Run Code Online (Sandbox Code Playgroud)
所以当我使用任何在线十六进制到字符串转换器时,我确实得到了à.
我也试过了
use utf8;
binmode(STDOUT, ":utf8");
Run Code Online (Sandbox Code Playgroud)
而不是à我得到+á
有没有办法得到正确的字符?
尝试使用格式化程序解析文件,例如Spreadsheet :: ParseExcel :: FmtUnicode:
use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::FmtUnicode;
#use Spreadsheet::ParseExcel::FmtJapan;
my $FileName = '../excel.xls';
my $parser = Spreadsheet::ParseExcel->new();
my $formatter = Spreadsheet::ParseExcel::FmtUnicode->new();
my $workbook = $parser->parse($FileName,$formatter);
Run Code Online (Sandbox Code Playgroud)
尝试FmtJapan,因为文档说:Spreadsheet :: ParseExcel :: FmtJapan格式化程序也支持Unicode.如果您遇到默认格式化程序的任何编码问题,请尝试相反.
*更新:我自己在带有希腊字符的xls文件中尝试过,但它对FmtUnicode或FmtJapan都不起作用.然后我发现这个perlmonks帖子,使用提供的My::Excel::FmtUTF8模块,并在打印单元格的值时成功运行$cell->value().