在 Perl 文件输出中强制使用 UTF-8 字节顺序标记

发布于 2024-12-04 17:02:36 字数 360 浏览 0 评论 0原文

我正在使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

深爱成瘾 2024-12-11 17:02:36

尝试这样做:

print $fh chr(65279);

打开文件后。

Try doing this:

print $fh chr(65279);

after opening the file.

演出会有结束 2024-12-11 17:02:36

有没有办法强制写入字节顺序标记?

要写出此内容,您必须在打开文件时使用 File::BOM 写出字节顺序标记。

例如,编写一个带有 BOM 的小端 UTF-16 文件:

use File::BOM ();
my $filename = "out.bin";
open(FH, '>:encoding(UTF-8):via(File::BOM)', $filename);
print FH "ʇsǝ⊥\n";

然后运行程序并检查输出:

% file out.bin
out.bin: Unicode text, UTF-8 (with BOM) text

在 perl 5.8.7 之前,存在宽字符的错误。

Is there a way to force the Byte Order Mark to be written?

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:

use File::BOM ();
my $filename = "out.bin";
open(FH, '>:encoding(UTF-8):via(File::BOM)', $filename);
print FH "ʇsǝ⊥\n";

Then run the program and check the output:

% file out.bin
out.bin: Unicode text, UTF-8 (with BOM) text

Prior to perl 5.8.7, there were bugs with wide characters.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文