use*_*925 14 string perl text byte-order-mark utf-8
我有以下问题:我正在读取UTF-8文本文件(我告诉Perl我这样做是通过":encoding(utf-8)").
该文件在十六进制查看器中如下所示:EF BB BF 43 6F 6E 66 65 72 65 6E 63 65
打印时,这会转换为"∩╗┐Conference".我理解我被警告的"广角"是BOM.我想摆脱它(不是因为警告,而是因为它弄乱了我后来进行的字符串比较).
所以我尝试使用以下代码删除它,但我失败了:
$ line = ~s/^\xEF\xBB\xBF //;
任何人都可以告诉我如何从我通过读取UTF-8文件的第一行获得的字符串中删除UTF-8 BOM?
谢谢!
ike*_*ami 15
EF BB BF是BOM的UTF-8编码,但您对其进行了解码,因此您必须查找其已解码的表单.BOM是在文件开头使用的零宽度无间隔空格(U + FEFF),因此以下任何一项都可以:
s/^\x{FEFF}//;
s/^\N{U+FEFF}//;
s/^\N{ZERO WIDTH NO-BREAK SPACE}//;
s/^\N{BOM}//; # Convenient alias
Run Code Online (Sandbox Code Playgroud)
我理解我被警告的"广角"是BOM.我想摆脱它
由于忘记:encoding在输出文件句柄上添加图层,因此您的角色很宽.以下内容添加:encoding(UTF-8)到STDIN,STDOUT,STDERR,并使其成为默认值open().
use open ':std', ':encoding(UTF-8)';
Run Code Online (Sandbox Code Playgroud)
如果您使用File::BOM打开文件,它将为您删除 BOM。
use File::BOM;
open_bom(my $fh, $path, ':utf8')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6922 次 |
| 最近记录: |