perl如何用UTF-8的字符集来写文件,谢谢

[tr][td]
Perl中字符串保存有两种方式,一种是utf8,一种字节序列,
同样是"日[/td][td]本[/td][td]語[/td][td]a[/td][td]bc[/td][td]",两种方式下在内存中的保存方式是不一样的。
如下表所示,utf8下是6个字节,字节序列是12个字节

[tr][td]UTF-8标志 [/td][td]字符 [/td][td]日        [/td][td]本        [/td][td]語        [/td][td]a      [/td][td]b     [/td][td]c
[/td][/tr][tr][td]true         [/td][td]代码 [/td][td]0x65E5 [/td][td]0x672C [/td][td]0x8A9E [/td][td]0x61 [/td][td]0x62 [/td][td]0x63[/td][/tr]

UTF-8标志 [/td][td]字符 [/td][td]日                   [/td][td][/td][td][/td][td]本                    [/td][td][/td][td][/td][td]語                   [/td][td][/td][td][/td][td]a      [/td][td]b     [/td][td]c
[/td][/tr][tr][td]false        [/td][td]代码 [/td][td]0xE6 [/td][td]0x97 [/td][td]0xA5 [/td][td]0xE6 [/td][td]0x9C [/td][td]0xAC [/td][td]0xE8 [/td][td]0xAA [/td][td]0x9E [/td][td]0x61 [/td][td]0x62 [/td][td]0x63

utf8的模块中的encode是把utf8字符串转换成字节序列,而decode是把字节序列转换成utf8字符串


只要输出的是utf8字符串,一般的浏览器就可以正常识别。

最近写的一段程序,也是转换编码的,请参考
open IN,  "<$file";
open OUT, ">$new_file";
binmode(IN,  ":encoding($enc_name)";
binmode(OUT, ":encoding(utf";
print OUT <IN>;
close IN;
close OUT;

问题的关键就在于获取原文件的编码。
liumangya你好, 你的意思是
Wide character in print at xxx.pl line xxx
这个错误是因为没有装Encode模块么,但是我已经装了啊,我是5.8的perl版本。win下
我用ppm装的
liumangya你好,那excel读出来是什么编码呢,我能控制么
我想把从excel里读出的多语言版本的字符串,用utf8的格式输出到一个文本文件里,请问如何实现。
### 用你们的code改了点测了下, OK了.
use strict;
use warnings;
use Win32::OLE qw(CP_UTF8); ### 引入这个CP_UTF8, 后面会用到

$Win32::OLE::CP = CP_UTF8; ### 直接读取UTF8

my $excel = Win32::OLE->GetActiveObject('Excel.Application')
            || Win32::OLE->new('Excel.Application', 'Quit');
my $book  = $excel->Workbooks->Open('e:/Test/Perl/test/test.xls');
my $sheet = $book->Worksheets('Sheet1');
my $list = $sheet->Range("A1:C1")->value->[0];

open(FOUT, '>:utf8', 'output_utf8.txt') || die "$!"; ### 输出编码为utf8
for (@$list) {
    print FOUT $_, "\n";
}
close FOUT;
Lonki兄,太感谢你了 ,问题解决了 perl真的是很强大
学习了~~

thanks !