펄에서 XML 파일의 일부 데이터를 처리 중이며 FIFO File :: Queue를 사용하여 프로세스를 분할하고 속도를 높이고 싶습니다. 한 펄 스크립트는 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 파일 핸들러를 사용하도록 강제하는 방법이 있습니까? 아마도 File : Queue가 최선의 선택이 아닙니다. 두 개의 perl 스크립트 사이에서 FIFO 대기열을 만들려면 sth else를 사용해야합니까?
감사 clariffication에 많은 도움이 될 프로그램의 상단에
use open OUT=> ':utf8'
를 추가 추측에는 요. JSON 내부 utf8 인코딩'JSON-> new-> utf8-> allow_nonref;'내 하루 ;-) – TomekK