- 论坛徽章:
- 12
|
本帖最后由 523066680 于 2014-03-15 19:48 编辑
回复 1# dahe_1984
分析出来了,
α-Sexithiophene
a6 c1 2d 53 65 78 69 74 68 69 6f 70 68 65 6e 65
从Excel2003表格读取时,变成了
- S e x i t h i o p h e n e
编码为:
3 b1 0 2d 0 53 0 65 0 78 0 69 0 74 0 68 0 69 0 6f 0 70 0 68 0 65 0 6e 0 65
a6 c1 是α的GBK码, 03 b1 是unicode码,其实这里是UTF-16BE
所有字符变成了双字节表达形式,说明EXCEL2003对于ASCII范围外地字符是统一保存为 UTF-16BE的- use Spreadsheet::Read;
- use Spreadsheet::WriteExcel;
- use Encode;
- # Read
- my $book = ReadData ("a.xls");
- my $cell = $book->[1]{cell}[1][1];
- #在win32下的终端输出,先按utf16-LE解码 然后按GBK编码
- print encode('gbk',decode('utf16-BE',$cell)),"\nCode: ";
- print xcode($cell,'x');
- # Write
- my $workbook=Spreadsheet::WriteExcel->new('b.xls');
- $worksheet = $workbook->add_worksheet();
- $worksheet->write(0,0,decode('utf16-BE',$cell));
- #这里试了几次,解码后再写入xls,显示就正常了。
- sub xcode {
- # xcode("string",'Mode'); Mode = x(hex), b(bin), d(int)
- for my $v ( split(//,$_[0]) ) {
- print sprintf ("%l$_[1] ",ord($v));
- }
- print "\n\n";
- }
复制代码 代码中的xcode函数只是用来显示字符串编码。
参考文件.rar
(4.43 KB, 下载次数: 8)
|
|