OemToChar_

Anfängerfragen zum Programmieren mit PureBasic.
Fordey_ra
Beiträge: 71
Registriert: 17.08.2010 22:30

OemToChar_

Beitrag von Fordey_ra »

Habe eine kleine Procedure geschrieben um Umlaute von einer alten QBasic Datei
mit Umlaute einzulesen. Dieses klappt auch fast bei allem Umlauten. Außer manchmal .

z.B. den Namen KRÜGER wird nicht richtig gewandelt. Mit einem Hey-Editor konnte ich herausfinden das für das Ü der Hex-Wert 9A steht.
Herauskommt das -->KRèGER<

Code: Alles auswählen

Procedure.s UmlautzuWin(Umlaut.s)  
  
  OemToChar_(Umlaut,Umlaut)
  
  Debug Umlaut
  
  ProcedureReturn Umlaut
EndProcedure
Wie kann das seien ?

__________________________________________________
Code-Tags hinzugefügt
20.07.2011
RSBasic
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: OemToChar_

Beitrag von RSBasic »

Sicher, dass du OemToChar verwenden möchtest und nicht CharToOem?
Vielleicht hilft dir dieser Code weiter:

Code: Alles auswählen

EnableExplicit

Define Output$

Procedure.s CharToOem(String.s)
  CharToOem_(@String, @String)
  
  ProcedureReturn String
EndProcedure

Procedure.s OemToChar(String.s)
  OemToChar_(@String, @String)
  
  ProcedureReturn String
EndProcedure

If OpenConsole()
  Output$ = CharToOem("KRÜGER")
  PrintN(Output$)
  Debug OemToChar(Output$)
  
  Input()
  
  CloseConsole()
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Fordey_ra
Beiträge: 71
Registriert: 17.08.2010 22:30

Re: OemToChar_

Beitrag von Fordey_ra »

KLappt nicht .
Interresant das Jürgen richtig übersetzt wird.
Hex Zahl in Datei 81 scheint aber Kleinschrift zu seien.
Benutzeravatar
Shardik
Beiträge: 746
Registriert: 25.01.2005 12:19

Re: OemToChar_

Beitrag von Shardik »

Deine im ersten Posting angeführte Prozedur funktioniert doch perfekt!
Zum Testen habe ich lediglich den ASCII-Code für ein großes Ü ($9A)
oder ein kleines ü ($81) an Deine Prozedur übergeben und er wird
korrekt in den von Windows verwendeten ANSI-Code umgesetzt:

Code: Alles auswählen

Procedure.s UmlautzuWin(Umlaut.s) 
 
  OemToChar_(Umlaut,Umlaut)
 
  Debug Umlaut
 
  ProcedureReturn Umlaut
EndProcedure

UmlautzuWin("KR" + Chr($9A) + "GER") ; Gibt "KRÜGER" aus
UmlautzuWin("J" + Chr($81) + "rgen") ; Gibt "Jürgen" aus
Dies funktioniert so allerdings nicht, wenn Du unter Compiler-Optionen
die Option "Unicode-Executable erstellen" aktiviert hast, da in diesem Fall
für den ersten und zweiten Parameter von OemToChar() nicht die gleiche
Variable verwendet werden darf:
MSDN hat geschrieben:If the OemToChar function is being used as an ANSI function, the string can be translated in place by setting the lpszDst parameter to the same address as the lpszSrc parameter. This cannot be done if OemToChar is being used as a wide-character function.
Antworten