[win32] user text laten intiepen in random talen (unicode?)

Pagina: 1
Acties:

  • Jace / TBL
  • Registratie: Augustus 2001
  • Laatst online: 23-03-2023
Heb twee appjes met daarin wat text edit boxjes enzo. Eentje is simpele kale win32 stuff, de ander is met Borland C++ Builder gemaakt. Het zijn geen unicode apps.

Hoe zorg ik dat users bijvoorbeeld Japanse text kunnen invoeren in die edit boxes? Dat hoeft alleen te werken op Japanse systemen, dus ik kan er vanuit gaan dat CP932 als default ansi encoding op zo'n systeem gebruikt wordt (en idem andere talen in hun eigen gebruikelijke codepage, dus CP1253 voor Grieks, CP1250 voor Oost-Europees, etc).

Ik heb nu het probleem dat wanneer ze Japanse text gaan invoeren, ze vraagtekentjes te zien krijgen.

Is er een manier om, zonder van mijn app een echte unicode app te maken (weet eigenlijk niet eens wat dat allemaal inhoudt, maar voor zover ik heb begrepen meer me lief is), mensen toch zulke strings te laten invoeren? Of het dan een unicode string is of een ansi string in hun system encoding boeit me niet, dat kan ik intern allemaal wel omzetten voor verdere verwerking.

  • Jace / TBL
  • Registratie: Augustus 2001
  • Laatst online: 23-03-2023
Nog even ter aanvulling:

Het rare is dat ik op mijn engelse win2k systeem wél Japanse tekens kan invullen, mits ik het font van die edit controls de juiste font/charset meegeef (in geval van Japans: "MS UI Gothic" met SHIFTJIS_CHARSET) en dan vanuit een text editor wat random bytes copy-paste die correcte CP932 ansi chars representeren (aangezien ik geen Japans toetsenbord heb :))

Bij hun werkt dat echter niet: of ik voor de hele gui nou het default system font gebruik of expliciet een geschikt font+charset voor die taal, ze blijven vraagtekentjes krijgen ;(. Dat font & charset is wel correct, als ik bijv. textlabels heb met diezelfde font settings en ik zet zelf (vanuit code) de captions met cp932 ansi strings krijgen ze (en ik zelf trouwens ook) correcte Japanse chars te zien.

Oh ja en het geldt zowel voor Borland (VCL) als voor kale win32 zooi, zou voor beide erg graag weten hoe het moet :)

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 18:05

Creepy

Tactical Espionage Splatterer

offtopic:
Als je in het vervolg je post wilt aanpassen i.p.v. een nieuwe post waardoor je 2 (of meer) posts van jezelf onder elkaar krijgt dan graag ;)

[ Voor 12% gewijzigd door Creepy op 28-01-2005 13:21 ]

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • Icelus
  • Registratie: Januari 2004
  • Niet online
C++ Builder ondersteunt geen Unicode.
Het gebruikte lettertype dient tevens de juiste karakters te ondersteunen.
Maak je geen gebruik van Unicode dan kan je maar een zeer beperkt aan karakters uit SHIFT-JIS gebruiken (hoogste 128 karakters uit ASCII set).

Misschien dat je hier iets aan hebt:
Delphi, C++Builder Unicode Controls

Developer Accused Of Unreadable Code Refuses To Comment


  • Jace / TBL
  • Registratie: Augustus 2001
  • Laatst online: 23-03-2023
Icelus schreef op vrijdag 28 januari 2005 @ 13:53:
C++ Builder ondersteunt geen Unicode.
Het gebruikte lettertype dient tevens de juiste karakters te ondersteunen.
Yep, maar dat gaat wel goed, ik neem expres voor bijvoorbeeld Japans het font "MS UI Gothic" (wat standaard schijnt te zijn voor Japanse GUI's, net zoals windows hier standaard MS Sans Serif o.i.d. gebruikt) met SHIFT_JIS charset. Ik kan alle Japanse tekens correct te zien krijgen als ik ze bijvoorbeeld in de captions van textlabels zet.
Maak je geen gebruik van Unicode dan kan je maar een zeer beperkt aan karakters uit SHIFT-JIS gebruiken (hoogste 128 karakters uit ASCII set).
Ja, nee, eh.. ASCII heeft geen tekens boven de 128 :)
En wat Ansi voor tekens boven de 128 heeft hangt af van de encoding, en in geval van CP932 (Microsofts variant van SHIFT-JIS, is bijna 100% hetzelfde, en default voor Japanse windows systemen) zijn er ook 2-byte combinaties, dus ook met Ansi kun je alle Japanse tekens wel tevoorschijn toveren. Als ik bijvoorbeeld in m'n clipboard de bytes 98 en AA zet (ctrl-c vanuit hex editor) en dat paste in m'n editbox met dat font+charset, krijg ik daar het karakter wat in unicode U+4E82 is (98,AA is de multibyte SHIFT-JIS encoding voor U+4E82). En zo werkt dat met ieder Japans teken.

Of wat bedoel je precies met "van Unicode gebruik maken"? Ik wil best de string die een user invult als unicode ontvangen, graag zelfs. Ansi mag ook, intern zet ik het toch allemaal om naar wat ik nodig heb.
Het probleem is dat ik zelfs geen foute tekens ontvang, maar alleen vraagtekens ;(
Misschien dat je hier iets aan hebt:
Delphi, C++Builder Unicode Controls
Thanks, zal er eens naar kijken.
Alhoewel ik het niet zo heb op customized controls, als dit een soort trickery is die ze om de normale edit controls heen hebben gebouwd, dan ben ik benieuwd hoe ze dat doen (dat truukje pas ik dan liever zelf ook even toe). Het is een simpel progje waar ik dit voor nodig heb, en custom componenten maken het weer lastiger om het voor anderen compilebaar te houden (of ik moet die controls ook in m'n cvs zetten en die moeten zij dan ook allemaal installen en blablabla)