当我不知道字节顺序时,如何在Perl中解码UTF-16数据?
发布时间:2020-12-15 21:17:10 所属栏目:大数据 来源:网络整理
导读:如果我打开一个文件(并直接指定编码): open(my $file,":encoding(UTF-16)","some.file") || die "error $!n";while($file) { print "$_n";}close($file); 我可以很好地阅读文件内容.但是,如果我这样做: use Encode;open(my $file,"some.file") || die "e
如果我打开一个文件(并直接指定编码):
open(my $file,"<:encoding(UTF-16)","some.file") || die "error $!n"; while(<$file>) { print "$_n"; } close($file); 我可以很好地阅读文件内容.但是,如果我这样做: use Encode; open(my $file,"some.file") || die "error $!n"; while(<$file>) { print decode("UTF-16",$_); } close($file); 我收到以下错误: UTF-16:Unrecognised BOM d at F:/Perl/lib/Encode.pm line 174 如何使其与解码一起使用? 编辑:这是前几个字节: FF FE 3C 00 68 00 74 00 解决方法
如果您只是指定“UTF-16”,Perl将查找字节顺序标记(BOM)以找出如何解析它.如果没有BOM,它就会爆炸.在这种情况下,您必须通过为little-endian指定“UTF-16LE”或为big-endian指定“UTF-16BE”来告诉Encode您具有哪个字节顺序.
虽然你的情况还有其他的事情发生,但是如果没有看到文件中的数据,很难说清楚.我对两个片段都有同样的错误.如果我没有BOM并且我没有指定字节顺序,我的Perl就会抱怨.您使用的是哪种Perl,您拥有哪个平台?您的平台是否具有文件的本机字节顺序?根据文档,我认为我看到的行为是正确的. 此外,您不能简单地读取某些未知编码的行(无论Perl的默认编码是什么),然后将其发送到解码.您可能最终处于多字节序列的中间.您必须使用Encode :: FB_QUIET来保存无法解码的缓冲区部分,并将其添加到下一个数据块: open my($lefh),'<:raw','text-utf16.txt'; my $string; while( $string .= <$lefh> ) { print decode("UTF-16LE",$string,Encode::FB_QUIET) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SpringBoot-整合数据库
- java – Spring WEB安全性:可访问URL列表
- 关于拦截VB中的MsgBox
- 什么是好的Perl代码导航器?
- java – 在Spring Boot Starter中获取ArtifactId和Version
- perl6 – 为什么我不能在Routine :: WrapHandle上调用meta方
- perl – 是否有规范的,如果不是核心的,Gnu Privacy Guard C
- 《Go in Action 2015.11.pdf》之Go’s type system
- Go语言通过smtp发送邮件的方法
- 如何使用Perl中的Backticks在两个不同的变量中捕获STDOUT和