Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi UTF-8 nach ASCII (die 1000ste) (https://www.delphipraxis.net/191804-utf-8-nach-ascii-die-1000ste.html)

p80286 22. Feb 2017 11:25

AW: UTF-8 nach ASCII (die 1000ste)
 
Delphi-Quellcode:
var
  tt : Array [0..255] of Byte;

for i:=0 to 255 do
  tt:=i;

{-- from xDC -> x9A --}
tt[$DC]:=$9A;

procedure Translate(var instr:ansistring);
begin
  for i:=1 to length(instr) do
    instr[i]:=ansichar(tt[byte(instr[i])]);
end;
So sollte es funktionieren und Du bist Herr des Verfahrens
(ich hoffe die Klammern stimmen)
(ich würde noch diese Char/Byte - Konvertierung weglassen und das gleich als Array of Byte behandeln)

Gruß
K-H

Fritzew 22. Feb 2017 11:36

AW: UTF-8 nach ASCII (die 1000ste)
 
Tja für das File musst Du natürlich noch festlegen was rausgeht:
Zitat:

Zitat von ernschd (Beitrag 1362324)
Wenn ich das ganze mit einem kleinen Testprogramm versuche, bekomme ich leider ein anderes Ergebnis (Hexadezimal DC statt 9A):

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses System.SysUtils;

type oemString = type Ansistring(437) ;

var f: TextFile;
  ein: string;
  aus: oemString;

function StringtoOem(const Value : string) : oemString;
begin
    result := Value;
end;

begin
  AssignFile(f, 'c:\temp\kodier.txt');
(*   Festlegen der Codepage für das File.........  *)
  SetTextCodePage(f, 437);

  Rewrite(f);
  ein := 'Ü';
  aus := StringtoOem(ein);
  writeln(f, aus);
  CloseFile(f);
end.


Fritzew 22. Feb 2017 11:53

AW: UTF-8 nach ASCII (die 1000ste)
 
Habe gerade noch geschaut wie das in der System.pas tatsächlich gehandelt wird.

Wenn es Dir nur darum geht in ein Textfile mit Write und Writeln zu schreiben reicht es aus bei der Erzeugung des Files
die richtige codepage zu setzen.
Also

Delphi-Quellcode:
procedure StringtoFileTest(const Value : string) ;
 Var f : TextFile;
 begin
   AssignFile(f, 'D:\Test\test.txt');
   SetTextCodePage(f, 437);
   rewrite(f);
   writeln(f, StringtoOem(Value));
   writeln(f, Value);
   closefile(f);
 end;

StringtoFileTest('Bücher');
ergibt im erzeugten File:


Zitat:

BšCHER
BšCHER
Write und Writeln überprüfen die CodePage des Files und wandeln wenn notwendig um.

ernschd 22. Feb 2017 12:11

AW: UTF-8 nach ASCII (die 1000ste)
 
Perfekt! Jetzt habe ich gleich zwei funktionierende Methoden für die Umwandlung! :-D

Vielen Dank an alle!

Ydobon 22. Feb 2017 12:47

AW: UTF-8 nach ASCII (die 1000ste)
 
zu spät


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:38 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz