![]() |
AW: Stringkonvertierung
Ich hatte ja noch einmal editiert. Trotzdem: wenn der Hersteller schon schreibt
Zitat:
|
AW: Stringkonvertierung
Nun wenn Du die Daten nicht mehr zurück liefern mußt, dann laß doch gleich alles durch eine Übersetzungstabelle laufen:
Delphi-Quellcode:
Die kannst Du anpassen wie Du es gerne hättest.
for i:=1 to length(mystring) do
mystring[i]:=asciitab[mystring[i]]; (diesen OEmtoAnsi's traue ich nur so weit wie ich sie selbst geschrieben habe) Gruß K-H |
AW: Stringkonvertierung
Zitat:
Zitat:
|
AW: Stringkonvertierung
Zitat:
Delphi-Quellcode:
AssignFile(fDatei, aDatei, 1);
|
AW: Stringkonvertierung
Zitat:
[edit] Halt, RecSize wurde beim Reset/Rewrite angegeben. :gruebel: Aber dem AnsiString-Read/ReadLn kann man die CodePage mitgeben. (laut dem QuellCode der XE-System.pas) |
AW: Stringkonvertierung
Zitat:
bis Delphi 2007 -> OemToCharA ab Delphi 2009 -> OemToCharW auf. Ok, dann häng ich da gleich noch ein A dran... |
AW: Stringkonvertierung
Eigentlich sollte OemToCharA ja OemCP_to_AnsiCP heißen, womit dann auch klarer wird, warum da keiner an Unicode gedacht hat.
Außerden ist OEM nunmal eine ANSI-CodePage und hat damit auch garnichts in einem UnicodeString zu suchen. Also wenn, dann sollte man es doch besser richtig machen, also via MultiByteToWideChar von CP_OEMCP nach Unicode. Und warum MS von dessen Verwendung abrät, liegt daran, daß viele es verwenden, um InSpace die einzelnen "SingleByte"-Zeichen der OEM-CP in die Ansi-CP umzuwandeln. Da aber je nach Ansi-CP das eben auch mal eine MultyByte-CodePage sein kann und fast kein Schwein das beachtet, gibt es da ein Problem mit der Puffergröße und es endet zu oft in einem Buffer-Overflow. z.B. Deutsch und Englisch sind ja SingleByte ... drum merken es viele Programmierer garnicht, daß sie totalen Mist verzapft haben. So sind also auch alle hier gezeigten Lösungsvorschläge nicht unbedingt "sicher" oder zumindestens funktionieren nicht immer richtig (siehe #12). :angel: Darum ist das Dateisystem nun eben auch immer englisch und wird lokalisiert, genausio wie das Systemlaufwerk auch fast immer nur noch C: ist, da zuviele Idioten mit hardgecodeten Pfaden arbeiten. |
AW: Stringkonvertierung
Ich würde das ja noch komplizierter machen :mrgreen:
Nein, ich bin faul:
Delphi-Quellcode:
Dieses ganze Oem/Ansi Hin-und-Her macht doch nur schwindelig im Kopf ;)
function ReadDataNormFile( const ADataNormFilename : string ) : string;
var LText : TStrings; begin LText := TStringList.Create; try LText.LoadFromFile( ADataNormFilename, {System.SysUtils} TEncoding.GetEncoding( {Winapi.Windows} CP_OEMCP ) ); Result := LText.Text; finally LText.Free; end; end; |
AW: Stringkonvertierung
Delphi-Quellcode:
type
OemString = type AnsiString(CP_OEMCP); var F: TextFile; S: OEMString; begin ReadLn(F, S);
Delphi-Quellcode:
:angel:
var
F: TextFile; S: AnsiString; begin ReadLn(F, S); SetCodePage(S, CP_OEMCP, False); |
AW: Stringkonvertierung
Zitat:
Delphi-Quellcode:
Result := TFile.ReadAllText(ADataNormFilename, TEncoding.GetEncoding(CP_OEMCP)); // Wobei man doch die TEncoding-Instanz eigentlich auch wieder greigeben müsste?
Du bist noch nicht faul genug. :lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:11 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