我正在處理來自perl中XML文件的一些數據,並希望使用FIFO File :: Queue來劃分和加速這個過程。 一個Perl腳本解析XML文件,並準備JSON輸出另一個腳本:如何讓File :: Queue能夠在perl中處理utf8字符串?
#!/usr/bin/perl -w
binmode STDOUT, ":utf8";
use utf8;
use strict;
use XML::Rules;
use JSON;
use File::Queue;
#do the XML magic: %data contains result
my $q = new File::Queue (File => './importqueue', Mode => 0666);
my $json = new JSON;
my $qItem = $json->allow_nonref->encode(\%data);
$q->enq($qItem);
只要%data
包含數字和A-Z的數據只有這個工作正常。但是,當widechars之一發生(例如,L,A,S,Z等),我得到:Wide character in syswrite at /usr/lib/perl/5.10/IO/Handle.pm line 207.
我試圖檢查字符串是有效的UTF8:
print utf8::is_utf8($qItem). ':' . utf8::valid($qItem)
和我確實得到了1:1
- 所以是的,我確實有正確的utf8字符串。
我必須找出其原因可能是SYSWRITE得到的FileHandler到不知道是一個隊列文件:UTF8編碼文件。
我對不對?如果是的話有什麼辦法強制File:Queue使用:utf8文件處理程序? 也許文件:隊列不是最好的選擇 - 我應該使用sth else在兩個Perl腳本之間創建FIFO隊列嗎?
感謝很多的clariffication。 JSON內部utf8編碼'JSON-> new-> utf8-> allow_nonref;'創造了我的日子;-) – TomekK