在 Perl 文件输出中强制使用 UTF-8 字节顺序标记
我正在使用 Perl 编写 CSV 文件。进入 CSV 的数据包含 Unicode 字符。我正在使用以下内容写出 CSV:
open(my $fh, ">:utf8", "rpt-".$datestring.".csv")
or die "cannot open < rpt.csv: $!";
文件中的字符已正确写入,但似乎不包含 UTF8 字节顺序标记。当我的用户尝试在 Excel 中打开该文件时,这会让他们感到厌烦。有没有办法强制写入字节顺序标记?
我尝试了以下方式:
print $fh "\x{EFBBBF};
我最终在文件顶部出现了乱码。
I'm writing out a CSV file using Perl. The data going into the CSV contains Unicode characters. I'm using the following to write the CSV out:
open(my $fh, ">:utf8", "rpt-".$datestring.".csv")
or die "cannot open < rpt.csv: $!";
The characters are being written correctly inside the file but it doesn't appear to be including the UTF8 Byte Order Mark. This throws off my users, when they try to open the file in Excel. Is there a way to force the Byte Order Mark to be written?
I attempted it the following way:
print $fh "\x{EFBBBF};
I ended up with gibberish at the top of the file.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试这样做:
打开文件后。
Try doing this:
after opening the file.
要写出此内容,您必须在打开文件时使用
File::BOM
写出字节顺序标记。例如,编写一个带有 BOM 的小端 UTF-16 文件:
然后运行程序并检查输出:
在 perl 5.8.7 之前,存在宽字符的错误。
To write this out, you must use
File::BOM
to write the Byte Order Mark out when the file is opened.For example, writing a little-endian UTF-16 file with BOM:
Then run the program and check the output:
Prior to perl 5.8.7, there were bugs with wide characters.