_InetGetSource erkennt kein ä,ö,ü ?

  • [autoit]

    #include <inet.au3>
    FileWrite(@DEsktopDir&"\wort.txt",_inetGetSource("http://translate.google.de/translate_t?prev=hp&hl=de&js=y&text=b%FCrger&file=&sl=de&tl=en&history_state0=#"))

    [/autoit]

    Ich hab schon alles probiert,
    Zeigt aber immer nur bà ¼ rger an

    mfg

    2 Mal editiert, zuletzt von Tecoist (8. November 2009 um 13:55)

  • Das könnte dir helfen!


    [autoit]

    StringReplace('$var', Chr(132), 'ä')

    [/autoit]

    Edit: Oder meinst du das gespeicherte mit ä ü ö und das kennt das Inet nicht?
    LG Kleiner

    Einmal editiert, zuletzt von kleiner27 (8. November 2009 um 13:47)

  • Es bleibt leider bei bà ¤ r

    Edit: Ja ich hol mir ja den Source und speicher ihn ab, wenn ich die datei öffne und nachschau
    steht da bà ¤ r

  • Erweiterter Zeichensatz (ANSI)


    Zeichen... Dez Hex
    ¼ 188 BC

    ½ 189 BD

    ¾ 190 BE


    bevor du denn speicherst solltest du ihn nach den zeichen duchsuchen und endern

    weißt du genau welches zeichen zu welchen buchstaben gehört?


    LG kleinr

  • _InetGetSource ließt immer mit ANSI-Kodierung der Strings. Viele Webseiten verwenden aber UTF-8 und dann kommt was falsches raus ;)
    Du kannst die falsche Darstellung so umwandeln:

    [autoit]

    Func _FixUTF8($String)
    ;Author: Prog@ndy
    Return BinaryToString(StringtoBinary($String, 1), 4)
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    MsgBox(0, '', _FixUTF8("bürger"))

    [/autoit]
  • Hi,

    Danke für die Hilfe.
    Ich habe bemerkt das die Wörter mit ü,ä etc. nicht ins englische umgesetzt werden sondern einfach im deutschen gelassen werden
    Also z.b:

    apfel=apple
    bär=bär

    Hat da einer eine Lösung ?

    [autoit]

    #include <inet.au3>
    #include <String.au3>
    #include <array.au3>

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 to 10000
    $Input=FileReadLine(@DesktopDir&"\liste.txt",$i)
    $S=_inetGetSource("http://translate.google.de/translate_t?prev=hp&hl=de&js=y&text="&$Input&"&file=&sl=de&tl=en&history_state0=#")
    $S2=_StringBetWeen($S,'<div id=result_box dir="ltr">','</div>')

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    FileWriteLine(@DesktopDir & "\wort.txt",$Input&"="&_FixUTF8(StringStripWS($S2[0],8)) & @CRLF)

    [/autoit][autoit][/autoit][autoit]

    Next

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func _FixUTF8($String)
    ;Author: Prog@ndy
    Return BinaryToString(StringtoBinary($String, 1), 4)
    EndFunc

    [/autoit]
  • du musst den String kodieren ;) In der URL sind nur bestimmte Zeichen erlaubt, andere müssen mit %Code dargestellt werden.

    Spoiler anzeigen
    [autoit]

    #include <inet.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $NEWINETFUNCS = _VersionCompare(@AutoItVersion, "3.3.0.0") > 0

    [/autoit] [autoit][/autoit] [autoit]

    $sWord = InputBox("Wort zum Übersetzen", "Deutsches Wort, wird Englisch")
    MsgBox(0, '', _GoogleTranslate($sWord, 'de', 'en'))

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _GoogleTranslate($sSource, $sSourceLang='auto', $sTargetLang='de')
    ;Author: Prog@ndy
    Local $sURL = "http://translate.google.de/translate_t?hl=de&js=n&prev=_t&ie=UTF-8&text=%s&sl=%s&tl=%s"

    $sURL = StringFormat($sURL, _URIEncode($sSource), $sSourceLang, $sTargetLang)
    Local $sResult
    Switch $NEWINETFUNCS
    Case True
    $sResult = BinaryToString(InetRead($URL, _Iif(@OSBuild>=6000, 17, 1)), 4)
    Case False
    $sResult = BinaryToString(StringtoBinary(_INetGetSource($sURL),1),4)
    EndSwitch

    Local $aRes = StringRegExp($sResult, '<div .*?id="?result_box"?.*?>(.*?)</div',3)
    If @error Then Return SetError(1,0,'')
    Return $aRes[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _URIEncode($sData)
    ; Author: Prog@ndy
    Local $aData = StringSplit(BinaryToString(StringToBinary($sData,4),1),"")
    Local $nChar
    $sData=""
    For $i = 1 To $aData[0]
    ConsoleWrite($aData[$i] & @CRLF)
    $nChar = Asc($aData[$i])
    Switch $nChar
    Case 45, 46, 48-57, 65 To 90, 95, 97 To 122, 126
    $sData &= $aData[$i]
    Case 32
    $sData &= "+"
    Case Else
    $sData &= "%" & Hex($nChar,2)
    EndSwitch
    Next
    Return $sData
    EndFunc

    [/autoit]
  • Ich störe nochmal kurz ;)
    Ich möchte es jetzt vom Englischen ins Deutsche,
    das klappt auch aber die ä etc. werden nicht umgewandelt

    Spoiler anzeigen
    [autoit]

    #include <inet.au3>
    #include <Misc.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global Const $NEWINETFUNCS = _VersionCompare(@AutoItVersion, "3.3.0.0") > 0
    Local $sResult
    Local $URL

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    FileOpen(@DesktopDir&"\liste.txt",1)

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 to 5
    $sWord=FileReadLine(@DesktopDir&"\liste.txt",$i)
    FileWriteLine(@DesktopDir&"\wor.txt",$sWord&"="&_GoogleTranslate($sWord, 'en', 'de'))
    Next
    FileClose(@DesktopDir&"\liste.txt")

    [/autoit] [autoit][/autoit] [autoit]

    Func _GoogleTranslate($sSource, $sSourceLang='auto', $sTargetLang='de')
    ;Author: Prog@ndy
    Local $sURL = "http://translate.google.de/translate_t?hl=en&js=n&prev=_t&ie=UTF-8&text=%s&sl=%s&tl=%s#"

    [/autoit] [autoit][/autoit] [autoit]

    $sURL = StringFormat($sURL, _URIEncode($sSource), $sSourceLang, $sTargetLang)
    Local $sResult
    Switch $NEWINETFUNCS
    Case True
    $sResult = BinaryToString(_INetGetSource($URL, _Iif(@OSBuild>=6000, 17, 1)), 4)
    Case False
    $sResult = BinaryToString(StringtoBinary(_INetGetSource($sURL),1),4)
    EndSwitch

    [/autoit] [autoit][/autoit] [autoit]

    Local $aRes = StringRegExp($sResult, '<div .*?id="?result_box"?.*?>(.*?)</div',3)
    If @error Then Return SetError(1,0,'')
    Return $aRes[0]
    EndFunc

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Func _URIEncode($sData)
    ; Author: Prog@ndy
    Local $aData = StringSplit(BinaryToString(StringToBinary($sData,4),1),"")
    Local $nChar
    $sData=""
    For $i = 1 To $aData[0]
    ConsoleWrite($aData[$i] & @CRLF)
    $nChar = Asc($aData[$i])
    Switch $nChar
    Case 45, 46, 48-57, 65 To 90, 95, 97 To 122, 126
    $sData &= $aData[$i]
    Case 32
    $sData &= "+"
    Case Else
    $sData &= "%" & Hex($nChar,2)
    EndSwitch
    Next
    Return $sData
    EndFunc

    [/autoit]
  • Warum liefert Google jetzt ANSI? Vorhin wars noch UTF-8 ... Also jezt

    [autoit]

    Switch $NEWINETFUNCS
    Case True
    $sResult = BinaryToString(_INetGetSource($URL, _Iif(@OSBuild>=6000, 17, 1)), 1)
    Case False
    $sResult = _INetGetSource($sURL)
    EndSwitch

    [/autoit]