Mik*_*ke 7 unicode perl utf-8 character-encoding
我已经知道如何将文件的非utf8编码内容逐行转换为UTF-8编码,使用类似下面的代码:
# outfile.txt is in GB-2312 encode
open my $filter,"<",'c:/outfile.txt';
while(<$filter>){
#convert each line of outfile.txt to UTF-8 encoding
$_ = Encode::decode("gb2312", $_);
...}
Run Code Online (Sandbox Code Playgroud)
但我认为Perl可以直接将整个输入文件编码为UTF-8格式,所以我尝试了类似的东西
#outfile.txt is in GB-2312 encode
open my $filter,"<:utf8",'c:/outfile.txt';
Run Code Online (Sandbox Code Playgroud)
(Perl说像"utf8"\ xD4"没有映射到Unicode")
和
open my $filter,"<",'c:/outfile.txt';
$filter = Encode::decode("gb2312", $filter);
Run Code Online (Sandbox Code Playgroud)
(Perl在未打开的文件句柄上说"readline()!"
它们不起作用.但有没有办法直接将输入文件转换为UTF-8编码?
更新:
看起来事情并不像我想象的那么简单.我现在可以以环形方式将输入文件转换为UTF-8代码.我首先打开输入文件,然后将其内容编码为UTF-8,然后输出到新文件,然后打开新文件以进行进一步处理.这是代码:
open my $filter,'<:encoding(gb2312)','c:/outfile.txt';
open my $filter_new, '+>:utf8', 'c:/outfile_new.txt';
print $filter_new $_ while <$filter>;
while (<$filter_new>){
...
}
Run Code Online (Sandbox Code Playgroud)
但这是太多的工作,它比简单地逐行编码$ filter的内容更麻烦.
我想我误解了你的问题.我想你想要做的是读取非UTF-8编码的文件,然后在程序中使用UTF-8数据.这更容易.使用正确的编码读取数据后,Perl在内部将其表示为UTF-8.所以,只要做你必须做的事情.
当您将其写回时,请使用您想要保存的任何编码.但是,您不必将其放回文件中即可使用它.
老答案
Perl I/O层只读取数据,假设它已经正确编码.它不会为你转换编码.通过告诉open使用utf8,你告诉它它已经是utf8了.
您必须像显示的那样使用编码模块(除非您想编写自己的I/O层).您可以将字节转换为UTF-8,或者如果您知道编码,则可以从一种编码转换为另一种编码.由于看起来您已经知道编码,因此您可能需要该from_to()功能.
如果您刚开始使用Perl和Unicode,请在执行任何操作之前先查看Juerd的Perl Unicode建议.
| 归档时间: |
|
| 查看次数: |
9433 次 |
| 最近记录: |