Ich habe diemal ein paar sorgen beim erstellen einer bat/cmd Datei welche Umlaute in den Parametern hat.
Ich habe Onkel Google und hier im Forum auch einiges zu diesem Thema gefunden nur halt nicht das passende.
Das Problem mit den Umlauten bezieht sich nur auf die Parameter in der bat datei, welche dann von dem ausführenden Programm fehlinterpretiert werden.
Im prinzip ganz simple nach zu stellen, so dass man in dem normalen windows Texteditor eine bat bearbeitet und dort einen Pfad mit umlauten eingibt.
Wenn ich diese bat datei in Notpad++ einlese und bei "Sprachen" auf MS Dos Stil umstelle, sieht man wie sich die ä,ö,ö ..usw ändern.
schreibt man nun ein ä,ü,ö -> speichern, dann funktioniert auch das programm, und im normalen Texteditor sieht man statt den ä,ü,ö ander Zeichen.
In Lazarus gibts ja ne menge Umcodierungs Funktionen. Ich habe UTF8toAnsi, UTF8toSys, UTF8toConsole ausprobiert aber es stehen entweder ä,ü,ö drin oder andere Zeichen, aber nicht die Zeichen welche ich mittels Notepad++ habe.
Code: Alles auswählen
function F_Mux_bat_erzeugen(output,filename:string):string;
var mkvmerge,paras:string; bat: TStringList;
begin
Result:='';
// mkvmerge pfad ermitteln
mkvmerge:='C:\mkvmerge.exe';
// 1.und 2. para
paras:='"'+mkvmerge+'" -o';
// 3. para - output file name
paras:=paras + ' "' +UTF8ToConsole(output+filename) +'.mkv"';
// bat list init
bat:=TStringList.Create;
bat.Add(paras);
// den code speichern
bat.SaveToFile(Utf8ToAnsi(output+filename)+'_mux.bat');
bat.Free;
// mit memo
with Memo do
begin
Clear;
Lines.Add(paras);
Lines.SaveToFile(output+filename+'_mux.bat');
end;
Result:='ok';
end;
Das erstellen ist alles kein Problem, aber welche Codierung muss ich verwenden, damit die Parameter stimmig sind?
Das andere Problem ist wegen dem BOM.
ich hatte die Funktion geschrieben, und gleich ausprobiert und dann meckerte mkvmerge wegen den falschen parametern, und man sah in der Console auch dieses Spezielle sonderzeichen für das BOM, ebenso sah man es im Hex editor. Erstellt TStringList immer eine Datei mit BOM?
Hatte dazu auch was gefunden, allerdings nur für Delphi (StringList.WriteBOM:=false).
hubblec4