Seite 1 von 1

OemToChar_

Verfasst: 20.07.2011 22:12
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

Re: OemToChar_

Verfasst: 20.07.2011 22:21
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

Re: OemToChar_

Verfasst: 20.07.2011 22:41
von Fordey_ra
KLappt nicht .
Interresant das Jürgen richtig übersetzt wird.
Hex Zahl in Datei 81 scheint aber Kleinschrift zu seien.

Re: OemToChar_

Verfasst: 09.08.2011 09:52
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.