Zeichensatz-Problem ?

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von OsunSeyi, 23.05.2008.

  1. #1 OsunSeyi, 23.05.2008
    OsunSeyi

    OsunSeyi Foren As

    Dabei seit:
    09.08.2007
    Beiträge:
    94
    Zustimmungen:
    0
    Wir haben hier einen (etwas seltsamen) Film am laufen:
    Es geht darum, Url's aus einer Liste von w3m (oder lynx) laden zu lassen und zu dumpen.
    Das klappt normal auch, aber bestimmte Url's wollen einfach nicht.
    Dabei passiert (gekürzt) folgendes:

    Code:
    # Inhalt von 'tmp':
    http://...url1
    http://...url2
    http://...url3
    ...
    
    # Inhalt von 'TEST':
    set -x
    $tmp='...'
    
    for i in `cat "$tmp"`; do
       echo "$i"
        w3m "$i";
    exit
    done; 
    
    # Ausgabe:
    1) Ausgabe von 'set -x' ist verkehrt.
    2) 'w3m' lädt eine verkehrte Adresse.
    3) 'echo' gibt die Adresse aber richtig aus!
    
    # Original:
    http://www.truckscout24.de/search/ger/detail.asp?vehicletype_id=2\
    &vehicle_id=10420683&make=0&mid=2&page=1&language=ger
    
    # Was ´draus wird:
    http://www.truckscout24.de/search/ger/detail.asp vehicletype_id=2\
    &vehicle_id=10420683&make'0&mid=2&page=1&language=ger
    
    Bei "detail.asp?" fehlt das Fragezeichen und "&make=" wird zu "&make'".
    Übergebe ich aber die Variable in der Form:
    var='http:...', lädt 'w3m $var' die Adresse korrekt.
    Woran kann das liegen?
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    ersetze mal

    Code:
       echo "$i"
       w3m "$i"
    
    durch

    Code:
       echo '$i'
       w3m '$i'
    
    Außerdem gefiele mir persönlich dieses Konstukt besser (uuoc):
    Code:
    while read i
    do
    ...
    ...
    done < tmp
    
     
  4. #3 OsunSeyi, 26.05.2008
    OsunSeyi

    OsunSeyi Foren As

    Dabei seit:
    09.08.2007
    Beiträge:
    94
    Zustimmungen:
    0
    Sorry, ich bin noch nicht sehr bewandert...8)
    Code:
    while read i
    do
        w3m  '$i'
        echo '$i'
    
    done < $tmp
    
    w3m: can't load '$i'
    
    Da ist noch was verkehrt...
    gruß,
    tom
     
  5. NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    Ups, das kann ja so auch nicht gehen. Ein ganz blöder Vorschlag von mir. ;-)

    Die einfachen Hochkomma verhindern, dass die Shell die Variable auslesen, bzw überhaupt als Variable erkennen, kann.

    Dein Problem ist, dass in den Strings Sonderzeichen (z.B "?") enthalten sind, die von der Shell interpretiert werden, wenn w3m aufgerufen wird. Das wird normalerweise durch einfache Hochkommas verhindert. Geht jedoch nur, wenn es keine Variable ist.

    Hmm...
     
  6. karru

    karru OSX'ler

    Dabei seit:
    02.05.2006
    Beiträge:
    338
    Zustimmungen:
    0
    Ohne flamen zu wollen, warum verwendest du nicht wget?

    PS: Bei "..." wird interpretiert, bei '...' nicht.
     
  7. #6 OsunSeyi, 27.05.2008
    Zuletzt bearbeitet: 27.05.2008
    OsunSeyi

    OsunSeyi Foren As

    Dabei seit:
    09.08.2007
    Beiträge:
    94
    Zustimmungen:
    0
    "GNU wget ist ein praktisches Tool, um Dateien aus dem Web zu laden..."
    Wusste nicht, daß es das gibt.
    Ist sogar installiert...:))
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~+
    OK:
    wget:
    Kann nicht nach »www.truckscout24.de/search/ger/list...&catalysator_id=0&gearingtype_id=0&fuel_id=0« schreiben (Der Dateiname ist zu lang).
    Mir wurde nahegelegt, das Script lieber mit Perl anzugehen (kann ich aber noch nicht..)
    Eigentlich klappt alles bestens, wenn dieses blöde Prob´ mit den Adressen von autoscout nicht wäre...
     
  8. NoXqs

    NoXqs Routinier

    Dabei seit:
    07.05.2007
    Beiträge:
    420
    Zustimmungen:
    0
    Ort:
    Bremen
    Bei '...' wird aber auch leider das $i nicht interpretiert, sondern nach als Wert $i weitergegeben.
     
  9. Ale-x

    Ale-x bash lehrling

    Dabei seit:
    13.04.2007
    Beiträge:
    109
    Zustimmungen:
    0
    Ort:
    Osnabrück
  10. #9 OsunSeyi, 28.05.2008
    OsunSeyi

    OsunSeyi Foren As

    Dabei seit:
    09.08.2007
    Beiträge:
    94
    Zustimmungen:
    0
    Wenn es bei Dir klappt, heißt das doch im Grunde, das auf meinem System was falsch eingestellt ist (?)
    Mit 'set -x' wird bei den betreffenden Zeilen folgendes ausgegeben:
    Code:
    set -x:
    + lynx -dump 'http://www.truckscout24.de/search/ger/detail.asp?vehicletype_id=2&\
    vehicle_id=1026936'&make=0&mid=2&page=1&language=ger
    
    => 936'&make ?
    
    echo:
    http://www.truckscout24.de/search/ger/detail.asp?\
    vehicletype_id=2&vehicle_id=10269367&make=0&mid=2&page=1&language=ger
    
    => 9367&make !
    Eine konvertierung des Strings nach utf resp. iso (beides probiert) hilft leider nicht.
     
  11. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  12. Ale-x

    Ale-x bash lehrling

    Dabei seit:
    13.04.2007
    Beiträge:
    109
    Zustimmungen:
    0
    Ort:
    Osnabrück
    poste doch mal dein komplettes script
     
  13. #11 OsunSeyi, 28.05.2008
    OsunSeyi

    OsunSeyi Foren As

    Dabei seit:
    09.08.2007
    Beiträge:
    94
    Zustimmungen:
    0
    Code:
    #!/bin/sh
    ## suchkfz
    
    set -x
    
       TMP=$HOME'/DAT/D/BIN/BIN_XYZ/.suchkfz'
      TMP1=$HOME'/DAT/D/BIN/BIN_XYZ/.suchkfz1'
    
    # die Suchanfrage: 
    scout='http://www.truckscout24.de/search/ger/list.asp?mid=2&vehicletype_id=2&language=ger&substructure_id=15&make=0&model=&pricefrom=-1&priceto=5000&mileagefrom=-1&mileageto=0&yearfrom=2002&yearto=0&totweightfrom=-1&totweightto=0&powerfrom=50&powerto=0&country=D&zip=49406&radius=100&price_type=1&sort=price&age=0&tst=&tmk=&tct=&action=Suchen&color_id=0&catalysator_id=0&gearingtype_id=0&fuel_id=0'
    
    lynx -source $scout > $TMP
    
    # alle Links zu Detailansichten filtern:
     cat $TMP								   	                            |\
    	egrep 'detail\.asp\?vehicletype_id'					                 |\
    	egrep -v '<IMG'								                          |\
    	sed 's/^[[:space:]]*//g'						                          |\
    	sed 's|<a href="|<a href="http://www.truckscout24.de/search/ger/|'	|\
    	sed 's/<a href="//g'							                          |\
    	sed 's/">//g'								                               \
    	> $TMP1
    
    # die Detailansichten dumpen:
    cat $TMP1 | while read line
    
    do
    	echo "$line"
    	lynx -dump "$line"
    done
    
    exit 0
    
    so sieht's aus.
    funktioniert (auf ähnliche Weise) mit Ebay umd mobile.de prima (wenngleich auch die Vorgehensweise...?)
     
Thema:

Zeichensatz-Problem ?