![]() |
Datenbank: MariaDB • Version: 10 • Zugriff über: UniDAC
ANSI-Unicode das alte Lied mal wieder
Hallo!
Folgendes Problem: MEINE Hauptanwendung und Datenbank sind durchgehend in Unicode realisiert, Sonderzeichen und Fremdsprachen funktionieren in MEINER Anwendung wunderbar. Jetzt habe ich ein "tolles" Warenwirtschaftssystem, das ich über Importdateien mit Belegen füttere. Dieses WaWi ist NICHT von mir und nicht vollständig Unicode-fähig. Die Dateischnittstelle möchte gerne ANSI-Codierung vorfinden. Jetzt kann sich jeder denken was passiert: Ich gebe eine "Hauptstraße" hinein und bekomme eine "Hauptstra?e" heraus. Was kann ich sinnvollerweise tun, damit wenigstens solche Zeichen übernommen werden die im erweiterten ASCII-Zeichensatz enthalten sind? Auf Kyrillisch und Mandarin kann ich da gut verzeichen, aber ein "ß" sollte schon machbar sein. Gibt es vorgefertigte "Transcode"-Funktionen für sowas? Grüße Cody |
AW: ANSI-Unicode das alte Lied mal wieder
Bisschen Code?
Weil ß geht immer. |
AW: ANSI-Unicode das alte Lied mal wieder
Erstelle die Datei mit dem entsprechenden Encoding und schreibe einfach die Daten hinein.
Z.B. mit ![]() oder direkt in eine Datei mit ![]() |
AW: ANSI-Unicode das alte Lied mal wieder
@Sir Rufo: Genau das dachte ich auch immer. Aber so einfach ist der Spaß anscheinend nicht:
Delphi-Quellcode:
EDIT: Hat sich erledigt. War wohl ne Denkblockade ^^ Lösung:
var
F, FTmp, FTarget, FOk, FErr, FErrDesc: TFileName; Q, Q2: TUniQuery; SL: TStringList; sSql, FileContent: string; Writer: TStreamWriter; begin sSql:= 'SELECT * FROM sync_jobs WHERE file_written=0;'; if QuerySQL(sSql, Q) > 0 then begin while not Q.Eof do begin F:= Q.FieldByName('filename').AsString; FTarget:= IncludeTrailingPathDelimiter(FFolderBase) + F; FileContent:= Q.FieldByName('filecontent').AsString; FTmp:= TPath.GetTempPath + TPath.GetGUIDFileName; Writer:= TStreamWriter.Create(FTmp, FALSE, TEncoding.ASCII); try Writer.Write(FileContent); finally FreeAndNil(Writer); end; if TFile.Exists(FTarget) then TFile.Delete(FTarget); if TFile.Exists(FTmp) and not TFile.Exists(FTarget) then begin TFile.Move(FTmp, FTarget); if TFile.Exists(FTarget) then begin sSql:= Format('UPDATE sync_jobs SET file_written=1 WHERE filename=''%s'' LIMIT 1;', [F]); ExecuteSQL(sSql, Q2); end; end; Q.Next; end; end;
Delphi-Quellcode:
Writer:= TStreamWriter.Create(FTmp, FALSE, TEncoding.ANSI);
|
AW: ANSI-Unicode das alte Lied mal wieder
Sollte das nicht
Delphi-Quellcode:
sein? Was erwartet das WAWI System einfach ANSI oder eine Spezielle Ansi Codepage?
Writer:= TStreamWriter.Create(FTmp, FALSE, TEncoding.ANSI);
|
AW: ANSI-Unicode das alte Lied mal wieder
Zitat:
|
AW: ANSI-Unicode das alte Lied mal wieder
DOS=CP437 WIN=win1252
für den deutschen Sprachraum wird es wahrscheinlich so sein. Du solltest etwas nachsichtiger sein, für viele Menschen hört auch die Welt hinter Ihrem Horizont auf. Gruß K-H |
AW: ANSI-Unicode das alte Lied mal wieder
Zitat:
Mit Nachsichtig sein hat das nur begrenzt was zu tun. Ich habe halt zwei Systeme die unbedingt zusammen spielen sollen, aber die Voraussetzungen einfach nicht gegeben sind. Da wird der Auftraggeber Abstriche in Kauf nehmen müssen. |
AW: ANSI-Unicode das alte Lied mal wieder
Zitat:
Wenn irgendwann in Deiner Kette eine Bildschirm oder Druckausgabe trotzdem ß ö ü ä ausgibt, dann stimmt da irgendwas im ganzen Zusammenspiel nicht. Könnte es sein, das 1250 gemeint war/ist? Gruß K-H |
AW: ANSI-Unicode das alte Lied mal wieder
[QUOTE=p80286;1341939]
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz