我正在使用Perl写出一个CSV文件。进入CSV的数据包含Unicode字符。我使用的是下面写的CSV出来:在Perl文件输出中强制使用UTF-8字节顺序标记
#OPEN THE FILE FOR WRITE
open(my $fh, ">:utf8", "rpt-".$datestring.".csv")
or die "cannot open < rpt.csv: $!";
即正确地书写文字里面的文件,但似乎并没有被包括UTF8字节顺序标记。这反过来会抛出我的用户试图在Excel中打开文件。有没有办法强制字节顺序标记写入?
我尝试过通过以下方式:
print $fh "\x{EFBBBF};
我结束了乱码的文件的顶部。任何帮助将不胜感激。
UTF-8的'Byte Order Mark'没有任何合理性 - UTF8只有一个可能的字节顺序。我知道,各种Windows应用程序依赖于“BOM”的存在来触发使用Unicode编码而不是Microsoft代码页,但如果您不处理损坏的MS应用程序,则向BOM添加BOM没有任何价值UTF8文件。 –
@Grant:或者,要迂回:由于UTF-8编码为字节流,所以* no *字节顺序。字节顺序(或字节顺序)仅适用于多字节数字。 – musiKk
@格兰特原则上,我同意你的看法。但是我的用户正在使用破碎的MS应用程序因此需要强制BOM。 –