unicode
Von:Jürgen Wondzinski juergen@wondzinski.de
An:Ulf Neugebauer uNe-tronics@t-NoSpam.de :gelesen
erstellt am:18.07.2019 10:58:53 - #23954 in section Antworten     Antworten mit Zitat
Servus Ulf,

Wir alle wissen, dass VFP ein reines 1Byte-Zeichensatz Produkt ist. Also kann es mit einer kompletten Unicode-Darstellung in einem _nativen_ Steuerelement nie klappen.

Aber du kannst jederzeit unterschiedliche Codepages pro Feld parallel darstellen, indem du dir die jeweilig zu verwendende Codepage in einem Int-Feld mit abspeicherst; die VFP-Textbox hat dazu das Property FontCharSet. So kannst du ohne Probleme deutsche und russische und chinesische Texte auf der selben Maske darstellen, gerne auch von Record zu Record unterschiedlich.

Wenn du den kompletten Unicode-Zeichensatz bunt gemischt darstellen willst (weil irgendwer Smileys im Artikeltext haben will?), dann nimm ne OCX-Textbox rein. Der String selber kann problemlos in der VFP-DBF gespeichert werden.




Servus
wOOdy

Lianja, Servoy und Visual FoxPro Technologieberater
Microsoft "Most Valuable Professional" von 1996 bis 2009
Servoy Valued Professional 2011

"*´¨)
¸.•´¸.•*´¨) ¸.•*¨)
(¸.•´. (¸.•` *
.•`.Visual FoxPro: It's magic !
(¸.•``••*

 Servus

    wOOdy

Von:Jürgen Wondzinski juergen@wondzinski.de
An:Ulf Neugebauer uNe-tronics@t-NoSpam.de :gelesen
erstellt am:18.07.2019 11:01:58 - #23955 in section Antworten     Antworten mit Zitat
Noch nen Nachtrag: Die Funktion STRCONV() kann von Unicode auf SingleCode und zurück wandeln.
Und mit dem RichText-Control kannst du schlimmstenfalls dein Unicode auch noch als RTF abspeichern.



Servus
wOOdy

Lianja, Servoy und Visual FoxPro Technologieberater
Microsoft "Most Valuable Professional" von 1996 bis 2009
Servoy Valued Professional 2011

"*´¨)
¸.•´¸.•*´¨) ¸.•*¨)
(¸.•´. (¸.•` *
.•`.Visual FoxPro: It's magic !
(¸.•``••*

 Servus

    wOOdy

Von:Ulf Neugebauer uNe-tronics@t-NoSpam.de
An:Jürgen Wondzinski juergen@wondzinski.de :gelesen
erstellt am:18.07.2019 16:30:35 - #23956 in section Antworten     Antworten mit Zitat
Hallo Woody,

vielen Dank für die Antwort.
So mache ich es ja in meinem Servicetool, welches ich on the fly in 25 Sprachen umschaltbar entwickelt habe. Mit den nativen vfp Steuerelementen kommt man nicht sehr weit, spätestens wenn jemand seinen russischen Text aus dem Excel kopieren will geht das nicht, und da geht es nicht nur um Smileys, sondern um unterschiedliche Sprachen in einer Box (z.B. Handlungsanweisungen), von der Formatierung mal gar nicht zu sprechen. Mit dem RTF Control bzw. mit anderen OCX-en klappt es dann. Die Sache mit dem Getfile(), Putfile(), Copy... habe ich in einer C++ dll realisiert. Hier kommt dann aus der dll der Dialog zur Auswahl, diese kopiert entweder nach temp oder gibt gleich die Binär Daten ähnlich FileToString an VFP zurück.
Ein anderer Aspekt ist der Zugriff auf Unicode Feldtypen z.B. aus dem SQL Server oder Oracle, wenn sich da auch Sprachen mischen, wird das nichts mehr mit reinem VFP, leider...

Beste Grüße
Ulf

Fox on The Run (The Sweet)
Von:Ulf Neugebauer uNe-tronics@t-NoSpam.de
An:Jürgen Wondzinski juergen@wondzinski.de :gelesen
erstellt am:18.07.2019 23:09:08 - #23957 in section Antworten     Antworten mit Zitat
Hallo Woody,

das währ ja schön wenn es so währe!
Zum Importieren aus einer Excel Zelle nutze ich eine nahezu nicht dokumentierte Codepage.
#DEFINE CP_UTF8 65001

Wenn es Utf8 ist kannst du es in den Ascii Raum konvertieren!

Hilfsfunktion:
FUNCTION Buf2Word ( tcBuffer )
RETURN ASC( SUBSTR( tcBuffer ,1 ,1 )) + ASC( SUBSTR( tcBuffer ,2 ,1 )) * 256

Arbeitsfunktion:
FUNCTION Utf8ToAsc( tcUtf8String )
LOCAL lnLen AS Integer ,;
lcChar AS String ,;
lcText AS String ,;
lnAscx AS Integer

lcText = ""
lnLen = LEN( tcUtf8String )
IF lnLen = 0
RETURN lcText
ENDIF

FOR lnCount = 1 TO lnLen-1 STEP 2
lcChar = SUBSTR( tcUtf8String ,lnCount ,2 )
lnAscx = Buf2Word( lcChar )
IF lnAscx < 256
lcText = lcText + CHR( lnAscx )
ELSE
DO CASE
CASE lnAscx = 287
lcText = lcText + CHR( 240 )

CASE lnAscx = 305
lcText = lcText + CHR( 253 )

CASE lnAscx = 304
lcText = lcText + CHR( 221 )

CASE lnAscx = 350
lcText = lcText + CHR( 222 )

CASE lnAscx = 351
lcText = lcText + CHR( 254 )

* Latin Extended-B
CASE lnAscx = 536
lcText = lcText + CHR( 222 )

CASE lnAscx = 537
lcText = lcText + CHR( 254 )

* Sonderzeichen http://www.webmaster-seo.com/unicode/original/range/17/
CASE lnAscx = 8230
lcText = lcText + "..."

CASE lnAscx = 8217
lcText = lcText + "'"

CASE lnAscx = 8211
lcText = lcText + "-"

OTHERWISE
ACTIVATE SCREEN
? lnAscx
lcText = lcText + "?"

ENDCASE
ENDIF
ENDFOR

RETURN lcText

Das kann man leicht erweitern, man sieht es an Fragezeichen im Return, dann muss man schauen welchem Code es im Ascii Zeichensatz es entspricht.
Aus lnAscx = 8230 werden einfach "...", und das ist natürlich auch im deutschem so.

Wie du siehst habe ich mich intensiv damit beschäftigt, auch weil mein Chef einfach mal aus dem Google Übersetzer etwas kopiert und in vfp einfügt, und wenn dann ??? auftaucht kriegt der ne Kriese... na ja mein Problem.

Warum ich dennoch mit vfp unterwegs bin hängt mit er einfachen on the fly Instanziierung von Objekten zusammen.
Ich hätte auch gern telefoniert, aber das willst du ja nicht... Schade.
Wenn ich meine neue Internetpräsenz endlich hinbekomme werde ich die dll's usw. auch zur allgemeinen Verfügung stellen. Ich bin ja auch schon 16 Jahre mit dem Fuchs unterwegs.

nichts für ungut!
Beste Grüße
Ulf


Fox on The Run (The Sweet)
Von:Jürgen Wondzinski juergen@wondzinski.de
An:Ulf Neugebauer uNe-tronics@t-NoSpam.de :gelesen
erstellt am:19.07.2019 21:23:38 - #23958 in section Antworten     Antworten mit Zitat
Wie gesagt: Ich würd da einfach das hier hernehmen, anstatt mir nen Wolf zu programmieren:
? STRCONV(cUniCodeTxt,10)



Servus
wOOdy

Lianja, Servoy und Visual FoxPro Technologieberater
Microsoft "Most Valuable Professional" von 1996 bis 2009
Servoy Valued Professional 2011

"*´¨)
¸.•´¸.•*´¨) ¸.•*¨)
(¸.•´. (¸.•` *
.•`.Visual FoxPro: It's magic !
(¸.•``••*

 Servus

    wOOdy