2011-02-17 3 views
-1

더 큰 데이터 세트를 파싱했습니다. 문제가 발생했습니다. 파싱 된 데이터 세트의 결과 - (독일어). 예를 참조하십시오 - 하나의 작은 일 왼쪽으로 : 독일의 언어로 우리가 제대로 인식되지 않는 특수 문자가 .... 다음 줄 참조 - 결과의 아웃 : 내가 추가 한 다음 줄에특수 문자를 처리하기 위해 정규식에서 사소한 변경이 발생했습니다.

lfd. Nr. Schul- nummer Schulname Stra�e PLZ Ort Telefon Fax Schulart Webseite 
1 0401 M�dchenrealschule Marienburg,�Abenberg, der Di�zese Eichst�tt Marienburg 1 91183� Abenberg� 09178/509210 Realschulen mrs-marienburg.homepage.t-online.de 
2 6581 Volksschule Abenberg�(Grundschule) G�ss�belstr. 2 91183� Abenberg� 09178/215 09178/905060 Volksschulen home.t-online.de/home/vs-abenberg 
3 6913 Mittelschule Abenberg� G�ss�belstr. 2 91183� Abenberg� 09178/215 09178/905060 Volksschulen home.t-online.de/home/vs-abenberg 
4 0402 Johann-Turmair-Realschule�Staatliche Realschule Abensberg Stadionstra�e 46 93326� Abensberg� 09443/9143-0,12,13 09443/914330 Realschulen www.rs-abensberg.de 
5 3041 Cabrini-Schule Offenstetten, Priv. F�rderzentrum�F�rderschwerp. geist.Entwickl. d. Kath.Jugendf�rs. Am Schmiedweiher 8 93326� Abensberg�Offenstetten 09443/9188-3 09443/918855 Volksschulen zur sonderp�dog. F�rderung www.cabrinischule.de 
6 3074 Private Berufsschule zur sonderp�d. F�rderung,�F�rderschwerpunkt Lernen, Abensberg Regensburger Stra�e 60 93326� Abensberg� 09443/709191 09443/709193 Berufsschulen zur sonderp�dog. F�rderung www.berufsschule-abensberg.de 

을 올바른 문자는 굵게 표시된 수정 중 일부를 볼 수 있습니다!

lfd. Nr. Schul- nummer Schulname **Straße** PLZ Ort Telefon Fax Schulart Webseite 
1 0401 **Mädchenrealschule** Marienburg, Abenberg, der **Diözese** Eichstätt Marienburg 1 91183 Abenberg 09178/509210 Realschulen mrs-marienburg.homepage.t-online.de 
2 6581 Volksschule Abenberg (Grundschule) **Güssübelstr**. 2 91183 Abenberg 

그럼 어떻게 우리가 특수 문자 문제의 둘레에 갈 수있는 정규 표현식을 다시 작성할 수 있습니다 .... 굵게 수정의 일부를 참조 ...?

여기에 어떤 힌트 .... ....?

BTW 코드를 참조하십시오

sub processData() { 
    while ($range <= $total_records) { 
     getstore("$url_to_process$suchbegriffe&a=$treffer&s=$range", 'processing.html') or die 'Unable to get page'; 
     $te->parse_file('processing.html'); 
     my ($table) = $te->tables; 
     for my $row ($table->rows) { 
     cleanup(@$row); 
     print OUTFILE "@$row\n"; 
     } 
     $| = 1; 
     print "Processed records $range to $counter"; 
     print "\r"; 
     $counter = $counter + 50; 
     $range = $range + 50; 
     $te = HTML::TableExtract->new; 
    } 
} 

sub cleanup() { 
    for (@_) { 
     s/\s+/ /g; 
    } 
} 
+0

로케일 사용; $ | = 1; setlocale POSIX :: LC_COLLATE, "de_DE" – zero

답변

1

이 정규 표현식에 함께 할 수 없다. 문제는 인코딩 문제입니다. 모든 것을 UTF-8로 표준화하면 훨씬 행복해집니다.

POSIX 로케일을 사용하지 마십시오! UCA를 사용하십시오.

0

클린업()의 대체를 제외하고 코드에서 정규식을 볼 수 없기 때문에 질문이 명확하지 않습니다. 그것은 당신이 문제를 일으키는 것으로 믿는 것입니까? 손상된 '특수'독일어 문자는 \ s 패턴과 일치하지 않으며, 이것이 범인인지 대단히 의심합니다.

데이터는 입력과 출력 모두에서 UTF-8로 인코딩됩니다. 그러나 출력 텍스트는 다양한 2 바이트 문자를 유니 코드 U + FFFD 또는 '치환 문자'에 대해 UTF-8 인 EF BF BD로 대체합니다. UTF-8로 모든 파일을 열면 모든 것이 잘되어야합니다. 나는 당신의 프로그램의 머리에 단순한 use encoding 'UTF8'이 치유되지 않을 것이라고 많이 생각하지 않습니다.

+0

대단하고지지적인 답변에 많은 감사드립니다. 나는 코드를 자세히 살펴볼 것이다! - 나 주말에 다시와. – zero

관련 문제