2010-11-24 21 views
0

J'utilise le module perl sapnwrfc pour me connecter à SAP et récupérer des rapports. Ce module utilise utf8 et lorsque les données sont retournées, certaines données ont un motif de corruption de caractère utf8. Cela semble se produire lorsqu'une ligne dans le rapport SAP a une longueur de plus de 4096 et mon idée actuelle est que le tampon de lecture de perl scinde les caractères utf8 et provoque la corruption.perl utf8 corruption

$abap_lookup = $sap_rfc->function_lookup("REPORT"); 
$abap_program = $abap_lookup->create_function_call; 

# set abap program input variables 
$abap_program->REPORT($abap_program_name); 
$abap_program->VARIANT($abap_variant_name); 

# call the abap program 
$abap_program->invoke; 

$ abap_program-> DATA a la corruption en une place dans chaque ligne qui est plus de 4 Ko

Ceci est le fragment avec la corruption, la ligne réelle est un octet ou deux plus de 4 Kb.

\x{f8fc}\x{2500}  \x{500}/\x{f8fc}\x{2500} 

C'est ce qui est attendu, donc je suppose que quelque chose coupe la ligne et cause le problème.

\x{f8fc}\x{2500}\x{f8fc}\x{2500}\x{f8fc}\x{2500} 

J'ai essayé toutes sortes d'open ': utf8' pragma et d'autres paramètres (utilisation UTF8, binmode (STDIN, ": UTF8"), binmode (STDOUT, ": UTF8");). Ont également essayé de désactiver la mise en mémoire tampon ($ | = 1;). Je ne peux pas dire si c'est un problème utf8 ou un problème de mise en mémoire tampon. Est-ce que quelqu'un sait pourquoi cela ferait ceci et comment le réparer?

+0

Quelle version de Perl? –

+0

c'est perl 5.12.2 –

+0

Aïe! C'est aussi proche que possible du courant ... si souvent, il s'avère à Perl 5.6.1 ou 5.8.2 ou quelque chose de similaire archaïque où le support UTF8 était connu pour être incertain. –

Répondre

0

n'a pas été en mesure de comprendre où la corruption se produit, mais il est répétable, donc j'ai construit un filtre.