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

时间:2017-02-24 23:27:42

标签: perl unicode character-encoding utf-16 byte-order-mark

我正在寻找正确的语法来从我已成功为UTF-8完成的UTF-16文本文件中删除BOM。请参阅下面的语法我尝试过:

$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//;

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

1 个答案:

答案 0 :(得分:3)

$readline中的内容是什么?

如果你有UTF-16be,

s/^\xFE\xFF//

如果你有UTF-16le,

s/^\xFF\xFE//

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

s/^\x{FEFF}//
s/^\N{BOM}//

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