Perl如何创建一个UTF-8的文件

Perl如何创建一个UTF-8的文件

open MyFile, ">:encoding(utf-8 )", "a.txt";
print MyFile "SomeText";
close MyFile

上面的代码调用之后,我发现a.txt的编码是ANSI的,如何才能让它是UTF-8的?

另:
--------
1. 怎么判定文件的编码:
用记事本打开这个文件,点"另存为",最下面有个"编码(Encoding)"可以选择,里面有"ANSI,Unicode,UTF-8"等选项.  
最开始默认的那个选项就是你当前的文件类型
2. 我的实际问题是:
使用perl写一个visual studio 2005 (vs)的solution(.sln)文件,但是vs不认识,然后我用记事本打开,选择"UTF-8"另存之后vs就认识了.
3. c#代码很容易实现:
StreamWriter sw = new StreamWriter("a.txt", false, Encoding.UTF8);
sw.WriteLine("some text");
sw.Close();

然而我却找不到对应的perl代码.
4. 我发到csdn上,还没有得到解决办法.不知道是因为很难还是因为那边没有人气...
5. 为什么我发utf-8 )变成了utf-

看描述楼主可能对windows的编码不是十分精通
有个偷懒的办法
在你生成文件完了加一句
system("piconv -f  cp936 -t utf8 a.txt > a.txt.tmp && del /f a.txt && rename a.txt.tmp a.txt")
忘了说正事了。
楼主可能感兴趣的模块有
Encode
Encode::Guess
Encode::Detect
前面两个activeperl自带,Encode::Detect需要自己安装
ppm install http://ppm.tcool.org/archives/Encode-Detect.ppd
to jigloo:
1. 不要偷懒的方法
2. 似乎在回避什么... 能不能回答的直接一点?直接给出代码?我相信代码应该只有几行. 谢谢了~~
use Encode;
open MyFile, ">:encoding(utf-", "a.txt";
my $string ="测试";
#utf8::encode($string);
$string=decode("gbk",$string);
print MyFile "$string";
close MyFile;

因为UTF-8 在低七位空间里和 ASCII 是一样的,而且Perl 在内部根据需要在定长的 8 位字符和变长 UTF-8 字符之间进行转换,所以如果你的字串里的所有字符都在十进制 0..127 的范围,那么写a.txt文件的编码是ANSI的,否则a.txt文件就以UTF-8的编码保存!

@zheng:
你的意思是没有办法创建一个UTF8文件而里面写的是aaaaaaaaaaa?
UTF-8's encoding algorithm is slightly complex, because the algorithm used depends on the codepoint. For codepoints up to 128 (U+007F), the character is encoded as in ASCII: one byte per codepoint. From U+0080 up to U+07FF, the codepoint is converted to its bit pattern, and this bit pattern is split over two bytes.-摘自Advanced Perl Programming, 2nd Edition/6.3.2. UTF-8

use Encode;
use File::BOM qw( :all );
open MyFile, '>:encoding(UTF-8 ):via(File::BOM)', "a.txt";
my $string ="aaaaaa";
$string=decode("gbk",$string);
print MyFile "$string";
close MyFile;

PerlMonks答案:
open( OUT, ">:utf8", "a.txt" ) or die "a.out: $!";
print OUT "\x{feff}";
print OUT "aaaa\n";
close OUT;