- 論壇徽章:
- 12
|
本帖最后由 523066680 于 2014-03-15 19:48 編輯
回復(fù) 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
所有字符變成了雙字節(jié)表達形式,說明EXCEL2003對于ASCII范圍外地字符是統(tǒng)一保存為 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";
- }
復(fù)制代碼 代碼中的xcode函數(shù)只是用來顯示字符串編碼。
參考文件.rar
(4.43 KB, 下載次數(shù): 8)
2014-03-15 16:54 上傳
點擊文件名下載附件
|
|