Ich nutze ja aktuell die Lösung mit dem BinarytoString etc. und die funktioniert auch.
Wenn es jedoch auch eine Lösung gibt, die das Problem "an der Wurzel" packt, würde ich diese halt bevorzugen aber ja, generell tut sie's.
Ich nutze ja aktuell die Lösung mit dem BinarytoString etc. und die funktioniert auch.
Wenn es jedoch auch eine Lösung gibt, die das Problem "an der Wurzel" packt, würde ich diese halt bevorzugen aber ja, generell tut sie's.
Ich nutze diese Funktion für GET, PUT und POST requests, daher muss ich dabei bleiben, wenn auch in diesem Fall es wirklich nur ein Get request ist..
Ich habe deinen Vorschlag mit dem Charset getestet aber das Ergebnis ändert sich (leider) nicht.
Hi, bitte nicht streiten ![]()
Die Daten kommen wie gesagt aus einer API Schnittstelle, die ich über AutoIt per winhttp request anspreche.
Func SendRequest2($Target, $RequestType, $Request, $OptionalData = $WINHTTP_NO_REQUEST_DATA)
Local $Data, $Url, $oHTTP, $Response, $Return, $Final, $aArray, $LastResponse
Local Const $HTTPREQUEST_PROXYSETTING_DEFAULT = 0
Local Const $HTTPREQUEST_PROXYSETTING_PRECONFIG = 0
Local Const $HTTPREQUEST_PROXYSETTING_DIRECT = 1
Local Const $HTTPREQUEST_PROXYSETTING_PROXY = 2
$Url = "https://" & $Target & $Request
$oHTTP = ObjCreate("winhttp.winhttprequest.5.1")
$oHTTP.Open($RequestType, $Url, False)
$oHTTP.Option(4) = 13056 ;Ignores any SSL Errors
$oHTTP.SetRequestHeader('accept', 'application/json')
$oHTTP.SetRequestHeader('Authorization', 'Basic ' & base64($Logindata, True, True))
$oHTTP.SetRequestHeader('Content-Type', 'application/json')
$oHTTP.Send($OptionalData)
$LastResponse = $oHTTP.GetAllResponseHeaders()
$Response = $oHTTP.Status
$Data = $oHTTP.ResponseText
$aArray = StringRegExp($Data,'"([^"]*)":"([^"]*)"', 3)
if IsArray($aArray) then
$Final = _Array_Resize($aArray, 2)
Else
$Final = $Data
EndIf
$Return = Response($Response)
If not IsString($Return) Then
Return $Final
Else
_FileWriteFromArray(@ScriptDir & '/lastError.txt', $LastResponse)
_FileWriteFromArray(@ScriptDir & '/lastData.txt' , $Final)
Return $Return
EndIf
EndFunc
Alles anzeigen
Leider ist in der Doku zur API nicht hinterlegt welche Codierung zurück kommt aber ich vemrute das hier 2 Probleme aufeinander treffen:
1. Die Text-Codierung (ich vermute UTF-8, da die CSV die ich dort einlesen kann nur UTF-8 akzeptieren)
2. HTML-Probleme mit Sonderzeichen
Das ist aber nur eine Vermutung. Im Original bekomme ich z.B. das hier: Hammersbacher StraÃe, wenn ich die Daten per FileWriteFromArray speicher, das ja als UTF 8 speichert.
Grundsätzlich würde es halt mit dem oben genannten "workaround" gehen, wobei ich immer natürlich die 100% Lösung bevorzugen würde.
Also danke schon vielmals, ich versuche mal das stepbystep zu beantworten:
#2: Die Daten Stammen aus einem Cloud Verwaltungstool, dort ist leider nicht angegeben in welcher Codierung die Daten zurück kommen. Ich arbeite bei mir in Autoit immer mit einer anderen Codierung, da ich das für ein weiterführendes Tool brauche (99% meiner Scripte versorgen dieses, daher per Standard auf anderer Codierung eingestellt).
Mit StringtoBinary habe ich auch shcon gespielt, da ich aber die Codierung nicht wusste habe ich es verworfen. Danke dafür!
#3: Ich benutze das direkt aus der Variable aber speichere mir das Originale immer nebenbei weg, damit ich, falls Fehler auftreten etwas direkt zum Vergleichen habe. In Notepad++ habe ich die Codierung auf ANSI geändert und das Problem blieb bestehen (nur die falschen Zeichen haben sich geändert).
Da es sich hierbei um Firmeninterne Daten handelt kann ich diese leider nicht zur Verfügung stellen.
#7: Jepp, habe es mit der "gedrehten" Variante getestet und bis auf das 'ß' (das ich nun noch gesondert per Stringreplace ersetze) funktioniert es einwandfrei.
Hi,
ich hoffe ihr könnt mir weiter helfen, eventuell übersehe ich die Lösung auch.
Ich bekomme Text aus einer API Abfrage, leider sind dort die entsprechenden Sonderzeichen falsch dargestellt. Also vermutlich ein Codierungsproblem.
Nun finde ich aktuell keinen Weg diese richtig darzustellen.
Beispiel (oben IST | unten SOLL):
é,ü,ö,Ã,ä,è
é,ü,ö,ß,ä,è
Jemand eine Idee welche Konvertirung das wäre und wie ich das korrigiert bekomme?
Ein einfaches Stringreplace funktioniert leider nicht ![]()
Nachdem ich die Codierung in Autoit auf UTF8 geändert habe, würde das Stringreplace funktionieren, jedoch sehe ich das aktuell nicht als Lösung an, da zu viele Sonderzeichen existieren wenn man international arbeitet.
Also bei mir funktioniert es so:
Opt('MustDeclareVars', 1)
;testbug.au3
#include <IE.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <GuiButton.au3>
#include <EditConstants.au3>
#include <ComboConstants.au3>
#include <StaticConstants.au3>
#include <GUIConstantsEx.au3>
#include <MsgBoxConstants.au3>
#include <GUIConstants.au3>
#include <GuiCtrlInfo.au3>
#include <Array.au3>
Global $oIE, $nMsg
Start_h1()
_IENavigate($oIE, 'https://www.google.de')
;Consolewrite(@error & @CRLF)
_IEAction($oIE, "stop")
;Consolewrite(@error & @CRLF)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
EndSwitch
WEnd
Func Start_h1()
Local $beginn, $end, $aId[0], $ID, $main, $bearbeiten, $datenbank, $extras, $inextra, $btn, $t
$oIE = _IECreateEmbedded()
$main = GUICreate("Hauptfentser", 1860, 849, -1, -1, -1, -1)
$beginn = GUICtrlCreateMenu("Start")
;test
GUICtrlCreateObj($oIE, 0, 60, 1459, 767)
;test
GUICtrlCreateMenuItem("Entcryptool", $beginn, -1, 0)
GUICtrlCreateMenuItem("Beenden", $beginn, -1, 0)
$bearbeiten = GUICtrlCreateMenu("Bearbeiten")
GUICtrlCreateMenuItem("Profile", $bearbeiten, -1, 0)
$datenbank = GUICtrlCreateMenu("Datenbank")
GUICtrlCreateMenuItem("MySQL Datenbank", $datenbank, -1, 0)
GUICtrlCreateMenuItem("Daten (Format-XML) anzeigen", $datenbank, -1, 0)
$extras = GUICtrlCreateMenu("Extras")
GUICtrlCreateMenuItem("Time sperren/entsperren", $extras, -1, -1)
$inextra = GUICtrlCreateMenu("Verlaufsordner", $extras)
GUICtrlCreateMenuItem("PDF", $inextra, -1, 0)
GUICtrlCreateMenuItem("txt", $inextra, -1, 0)
GUICtrlCreateMenuItem("test", $beginn, -1, 0)
GUICtrlCreateCombo("", 80, 9, 150, 21, -1, -1)
GUICtrlSetData(-1, "")
GUICtrlCreateInput("", 80, 40, 150, 20, $ES_PASSWORD, $WS_EX_CLIENTEDGE)
$btn = GUICtrlCreateButton("Login", 242, 40, 70, 20, -1, -1)
GUICtrlSetBkColor($btn, "-2")
GUICtrlCreateButton("Profil laden", 900, 0, 193, 60, $BS_COMMANDLINK, -1)
GUICtrlCreateButton("Datenbank erstellen ...", 600, 0, 193, 60, $BS_COMMANDLINK, -1)
GUICtrlCreateEdit("", 1459, 170, 398, 657, BitOR($ES_MULTILINE, $WS_VSCROLL, $ES_AUTOVSCROLL)) ;, -1, -1)
GUICtrlCreateLabel("Benutzer", 13, 15, 50, 15, -1, -1)
GUICtrlSetBkColor(-1, "-2")
GUICtrlCreateLabel("Passwort", 13, 40, 50, 15, -1, -1)
GUICtrlSetBkColor(-1, "-2")
GUICtrlCreateProgress(1537, 154, 252, 10, -1, -1)
GUICtrlCreateButton("menue", 1609, 0, 200, 60, $BS_COMMANDLINK, -1)
GUICtrlCreateLabel("von", 373, 20, 21, 15, -1, -1)
GUICtrlSetBkColor(-1, "-2")
GUICtrlCreateLabel("bis", 373, 40, 21, 15, -1, -1)
GUICtrlSetBkColor(-1, "-2")
GUICtrlCreateInput(@MDAY & '.' & @MON & '.' & @YEAR, 399, 20, 63, 15, $ES_CENTER, $WS_EX_CLIENTEDGE)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetBkColor(-1, "-2")
GUICtrlCreateInput(@MDAY & '.' & @MON & '.' & @YEAR, 399, 40, 63, 15, $ES_CENTER, $WS_EX_CLIENTEDGE)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetBkColor(-1, "-2")
$end = GUICtrlCreateInput("23:00:00", 466, 40, 51, 15, $ES_CENTER, $WS_EX_CLIENTEDGE)
GUICtrlSetState(-1, $GUI_DISABLE)
GUICtrlSetBkColor(-1, "-2")
GUISetBkColor(0xFFFFFF)
GUISetState(@SW_SHOW, $main)
For $i = $beginn to $end
$t = _GuiCtrlGetInfo($i)
If $t.ID <> $ID Then
$ID = $t.ID
_ArrayAdd($aId, $ID)
EndIf
Next
Return $aId
EndFunc
Alles anzeigen
Deine Objekt zuweisung ist falsch:
Zeile 32 ändern in: $oIE = _IECreateEmbedded()
Zeile 37 ändern in: GUICtrlCreateObj($oIE, 0, 60, 1459, 767)
Probier es dann nochmal.
Edit: Füge in Zeile 19 ggf. noch ein: Consolewrite(@error & @CRLF) (nur zum debugging) und danach: _IEAction($oIE, "stop") (ist in der Hilfe nach allen Navigate Befehlen.
Ich denke, das dies aus 2 Gründen ggf. mehr ein "nice to have" ist:
1. Wer programmiert sollte/muss sich eigentlich mit Englisch beschäftigen (nur Vokabeln! nicht mal die Zeiten)
2. Es heutzutage gute (Online-) Übersetzungstools gibt (keine perfekten!) mit deren Hilfe sich auch sowas übersetzen lässt.
Bestes Beispiel: Google interner Übersetzer, sprich: Englische Hilfe öffnen und dann von Google die Webseite übersetzen lassen. Das sollte für das Verständnis vollkommen ausreichen.
Bin ich da nun so verkehrt mit meiner Meinung?
Das wollt ich auch grade mal vorschlagen, alternativ auch mal etwas ohne Umlaute testen.
Versuch mal bei _RunDOS("net use H: \\192.168.150.34\Bücher Cloud /persistent:yes") auch beim Pfad " zu nutzen, also so:
_RunDOS("net use H: '\\192.168.150.34\Bücher Cloud' /persistent:yes")
2022_12_22_08_55_40_Hi_Assistant_Greeting.jpg
AspirinJunkie
Und es hätte noch eine Zeile sparen können, indem das Global in der 2. Teile steht
ChatGPT hat auf Nachfrage dann einen dynamischen Code erstellt, der das ganz mit 177 Zeichen macht. Daraufhin habe ich ihm deinen Code geschickt und bekam folgende Antwort:
ZitatDu hast Recht, dass der von dir vorgeschlagene Code tatsächlich kürzer ist als das von mir vorgestellte Beispiel. Der Code verwendet eine Schleife, um den Baumstring Schritt für Schritt aufzubauen, indem er jedes Mal eine zusätzliche Zeile hinzufügt, die aus Sternen besteht. Diese Sternzeichen werden mithilfe der StringFormat-Funktion generiert und dann dem Baumstring hinzugefügt.
Es gibt jedoch einige mögliche Nachteile an diesem Ansatz. Zum einen ist der Code etwas schwieriger zu verstehen, da er eine Reihe von Funktionen verwendet, die für sich genommen vielleicht nicht offensichtlich sind. Zum anderen ist der Code nicht sehr flexibel und kann nur Baumhöhen generieren, die eine gerade Anzahl von Zeilen haben. Wenn du beispielsweise versuchen würdest, einen Baum mit einer Höhe von 7 Zeilen zu erstellen, würde der Code fehlschlagen.
Letztendlich hängt es davon ab, welche Anforderungen du an deinen Weihnachtsbaum hast und wie wichtig dir die Lesbarkeit und Flexibilität des Codes sind. Beide von uns vorgestellten Beispiele könnten in unterschiedlichen Situationen sinnvoll sein. Ich hoffe, das hilft bei der Entscheidung! Wenn du weitere Fragen hast, lass es mich wissen.
Peter S. Taler Ich denke da musst du das dann etwas einbauen das entsprechend per Endung entweder normale Textverarbeitung macht oder (bei den Office Dateien z.B.) die Datei (und zwar jede einzelne) entpackt (Office-Dateien sind ja nur Zip.Dateien) und entsprechend durchsucht/verarbeitet wie bei der normalen Textverarbeitung. Das ganze dann natürlich wieder löschen und wieder von vorne.
Wobei die zip.au3 das kann: (ich weiß gerade nicht was du dann als Ergebnis zurück bekommst):
Ganz ehrlich: Kurz überlegt ob ich das so verkaufen kann und es dann verworfen, da es mir zu unplausibel klang ![]()
Das du Punkte statt Leerzeichen genutzt hast ist offensichtlich Absicht gewesen, daher: all good.
Eignetlich vergessen zu ändern, da ich das beim Testen zur besseren Visualisierung genutzt habe
Aber dann ist es halt so^^
Meine Lösung sieht so aus:
Opt('MustDeclareVars', 1)
#include <MsgBoxConstants.au3>
#include <String.au3>
if GenerateTree(10) then MsgBox($MB_SYSTEMMODAL, '', 'Merry Christmas!')
Func GenerateTree(Const $Rows)
Local $Dots
Local $Xs = 1
if $Rows < 4 then
ConsoleWrite('Enter minimum 4')
Return False
EndIf
;*
$Dots = 2 + $Rows - 1
ConsoleWrite(_StringRepeat('.', $Dots) & '*' & _StringRepeat('.', $Dots) & @CRLF)
ConsoleWrite(_StringRepeat('.', $Dots) & 'X' & _StringRepeat('.', $Dots) & @CRLF)
For $High = 1 to $Rows - 3
$Dots -= 1
$Xs += 2
ConsoleWrite(_StringRepeat('.', $Dots) & _StringRepeat('X', $Xs) & _StringRepeat('.', $Dots) & @CRLF)
Next
$Dots = 2 + $Rows - 2
ConsoleWrite(_StringRepeat('.', $Dots) & '|.|' & _StringRepeat('.', $Dots) & @CRLF)
Return True
EndFunc
Alles anzeigen
Sicher das es der Dateiname ist? Normalerweise kommt es darauf an was für eine Blockgröße du gewählt hast beim Formatieren. Sind die Dateien kleiner als die Blcöke oder minimal Größer, "verlierst" du potenziellen Speicherplatz.
Habe das aktuell bei einer SSD im Netzwerk. Viele Bilder, die kleiner sind als der "Default" Block und daher weniger Platz brauchen. Denkste, der ganze Block wird dadurch verbraucht und im Endeffekt hast du wneiger Platz als eigentlich möglich.
(Dateigröße < Größe auf dem Datenträger)
Prüf mal in Notepad++ welche Codierung die Original-Datei hat (UTF8 etc.).
Ggf. brcuht der TV eine bestimmte Codierung und hat daher damit Probleme.
Das mag dann den Unterschied ausmachen. Danke AspirinJunkie für die Erklärung.