I too have been having big problems with unicode-encoded stuff in Spreadsheet::ParseExcel (Perl v5.8.4, module v2603).
Happily, I've been having some success with running a modified copy of the FmtDefault class as outlined in bugs 7376 and 168. In summary, my FmtDefault looks like this:
This section occurs somewhere around line 68 of the file.
This change makes it so that accessing
will return one of (a) an ISO-8859-1 string (because that's what the cell contained and no upgrades or conversion was necessary), (b) a UTF-8 string, or (c) an ISO-8859-1 string preceded with a null byte. This third one is apparently a bug that arises when the source text contains a mix of fonts. I'll raise an error report on it later; you can probably ignore that possibility.
For most applications, and a sufficiently modern perl, you don't have to worry about the difference between UTF-8 strings and ISO-8859-1 strings---plain Latin-1 strings should be upgraded where needed, but you may need to tell perl what's what before concatenating mixed latin1/utf strings (see http://www.ahinea.com/en/tech/perl-unicode-struggle.html for more).
As for the conversion of UTF-8 to ISO-8859-7, I've never gotten Unicode::Map and FmtUnicode working correctly. Instead, I use either 'use encoding' (and set the environment variable PERL_ENCODING to the required locale; all plain file I/O is then filtered so that it converts to/from that encoding as the data is written/read) or 'use Encode qw(encode decode)' followed by explicit conversion from utf-8 to the local character set, viz:
And from running this I get:
I hope this was of some help.
Wide character in print at x3.pl line 36.The warning is given when it tried to print UTF8/multibyte characters. Is there a way other than suppressing warnings to prevent the above warnings to appear.
I'm glad to hear that the fix worked for you too!
The wide character warning is covered in the link that I mentioned in my last message. The URL is
The relevant bit is the second-last section of that document. Specifically, add this to your code to tell perl that STDOUT accepts UTF-8: