使用 Perl 从字符串中删除 UTF-16 BOM

1 unicode perl byte-order-mark utf-16 character-encoding

我正在寻找正确的语法来从 UTF-16 文本文件中删除 BOM,我已经成功地为 UTF-8 做到了这一点。请参阅下面的我尝试过的语法:

$readline =~ s/^\N{ZERO WIDTH NO-BREAK SPACE}//;
$readline =~ s/^\N{BYTE ORDER MARK}//;
$readline =~ s/^\N{BOM}//;
$readline =~ s/^\x{FEFF}//;
$readline =~ s/^\0x{FEFF}//;
$readline =~ s/^\x{FE}\x{FF}//;
$readline =~ s/^\xFE\xFF//;
$readline =~ s/^\0xFE\0xFF//;
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,这些是重复的,但我正在尝试任何我能找到的东西。为了打开文件,我使用了编码功能。任何帮助将不胜感激。

ike*_*ami 5

里面有什么$readline

如果你有UTF-16be,

s/^\xFE\xFF//
Run Code Online (Sandbox Code Playgroud)

如果你有UTF-16le,

s/^\xFF\xFE//
Run Code Online (Sandbox Code Playgroud)

如果您有 Unicode 代码点(解码文本),

s/^\x{FEFF}//
s/^\N{BOM}//
Run Code Online (Sandbox Code Playgroud)

或者,您也可以使用File::BOM删除标记并解码流。