Ansi<-->Unicode

Partagez votre expérience de PureBasic avec les autres utilisateurs.
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Ansi<-->Unicode

Message par nico »

Voici les deux procédures de conversion Ansi<-->Unicode, ainsi qu'un exemple d'utilisation.

Code : Tout sélectionner

Procedure.l Ansi2Uni(ansi.s)
  size.l=MultiByteToWideChar_(#CP_ACP,0,ansi,-1,0,0)
  Dim unicode.w(size)
  MultiByteToWideChar_(#CP_ACP, 0, ansi, Len(ansi), unicode(), size)
  ProcedureReturn @unicode()  
EndProcedure 
 
Procedure.s Uni2Ansi(*Unicode.l)
  size.l = WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, #Null, #Null, #Null, #Null)
  ansi.s=Space(size)
  WideCharToMultiByte_(#CP_ACP, 0, *Unicode, -1, @ansi, size, #Null, #Null)
  ProcedureReturn ansi  
EndProcedure
 
*pointeur=Ansi2Uni("Ben ça alors, dis donc, si j'avais su.")
Debug Uni2Ansi(*pointeur)


Un exemple:

Code : Tout sélectionner

Procedure.l Ansi2Uni(ansi.s)
  size.l=MultiByteToWideChar_(#CP_ACP,0,ansi,-1,0,0)
  Dim unicode.w(size)
  MultiByteToWideChar_(#CP_ACP, 0, ansi, Len(ansi), unicode(), size)
  ProcedureReturn @unicode()  
EndProcedure  

If OpenWindow(0, 200, 200, 400, 100, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "PureBasic Window") 
  CreateGadgetList(WindowID(0)) 
  ButtonGadget(0, 320, 20, 60, 20, "Go") 
  StringGadget(1,10,20,300,20,"Borderless StringGadget",#PB_String_BorderLess) 
EndIf    
SetGadgetText(1, "http://www.purebasic.com/screenshots/Editor.png") 
Repeat 
  event = WindowEvent() 
  Select event 
    Case #PB_EventGadget 
      Select EventGadgetID() 
        Case 0 
          If OpenLibrary(0,"shdocvw.dll") And IsFunction(0,"DoFileDownload") 
            texte$=GetGadgetText(1) 
            CallFunction(0,"DoFileDownload",Ansi2Uni(texte$)) 
          EndIf 
      EndSelect 
  EndSelect 
Until event =#PB_EventCloseWindow  
CloseLibrary(0) 
End
:)
Fred
Site Admin
Messages : 2808
Inscription : mer. 21/janv./2004 11:03

Message par Fred »

Pratique ! :)
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

Ma question va peut-être sembler bête mais c'est quoi la différence entre du ansi et du unicode ?

visiblement, le texte n'est pas enregistrement sous le même format d'après ton exemple mais après ...
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

L'ordinateur est né avec le code ASCII définit par la norme ANSI (Américaine), un caractère étant codé sur 8 bits (de 0 à 127). Les codes (de 128 à 255) étaient différents suivant les pays (Europe de l'ouest).

Certains pays étaient exclus car leur jeu de caractères ne pouvait pas être codifié dans cette norme, la chine, l'hébreux.....etc

Il a bien fallu uniformiser tout ça avec une nouvelle norme:unicode, codé sur 16 bits (65535 valeurs) pour avoir un code universel et unique pour tout les pays.

OUI, mais alors il faut deux fois plus de place pour du simple texte!
alors est né UTF-8 conciliant le code ASCII et le code UNICODE.......


http://sebsauvage.net/comprendre/ascii/
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

ok merci, donc c'est ces fichus amerloques qui ont mis le bazar :mrgreen:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Oui, c'est bien ça ! :lol:

L' ordinateur est une grande invention, mais il ne permettait pas grand chose à ses débuts, pas de carte graphique, pas de disque dur, mémoire super limité...et j'en passe.

Maitenant, tout à changé, mais on continue quant même à raler :x

:)
Avatar de l’utilisateur
Chris
Messages : 3731
Inscription : sam. 24/janv./2004 14:54
Contact :

Message par Chris »

Les premiers ordinateurs:
http://www.commentcamarche.net/histoire/pc.php3
Les ordinateurs programmables

En 1938, Konrad Zuse invente un ordinateur qui fonctionne grâce à des relais électromécaniques: le Z3. Cet ordinateur est le premier à utiliser le binaire au lieu du décimal.
En 1937, Howard Aiken met au point un ordinateur programmable mesurant 17m de long et 2.5 mètres de hauteur, permettant de calculer 5 fois plus vite que l'homme:
C'est le Mark I d'IBM.
Il est alors constitué de 3300 engrenages, 1400 commutateurs reliés par 800km de fil électrique.

En 1947, le Mark II voit le jour, ses engrenages sont remplacés par des composants électroniques.

Les ordinateurs à lampes


En 1942, l'ABC (Atanasoff Berry Computer) du nom de ses concepteurs: J.V. Atanasoff et C.Berry voit le jour.

En 1943, le premier ordinateur ne comportant plus de pièces mécaniques est créé grâce à J.Mauchly et J.Presper Eckert: l'ENIAC (Electronic Numerical Integrator And Computer). Il est composé de 18000 lampes à vide, et occupe une place de 1500 m2. Il fut utilisé pour des calculs ayant servi à mettre au point la bombe H.
Son principal inconvénient était sa programmation:
l'ENIAC était en effet uniquement programmable manuellement avec des commutateurs ou des câbles à enficher.

La première erreur informatique est dûe à un insecte qui, attiré par la chaleur, était venu se loger dans les lampes et avait créé un court-circuit. Ainsi le terme anglais pour "insecte" étant "bug", le nom est resté pour désigner une erreur informatique. Le terme bug a été francisé par la suite en bogue, terme désignant également le nom de l'enveloppe épineuse et piquante de la chataigne.

En effet, les tubes étant de médiocres conducteurs, ils nécessitaient une grande quantité d'énergie électrique qu'ils dissipaient en chaleur. Cette lacune est palliée en 1946 avec la mise au point de l'EDVAC (Electronic Discrete Variable Computer) permettant de stocker les programmes en mémoire (1024 mots en mémoire centrale et 20000 mots en mémoire magnétique).
:lol:

Chris :)
Heis Spiter
Messages : 1092
Inscription : mer. 28/janv./2004 16:22
Localisation : 76
Contact :

Message par Heis Spiter »

J'ai pas la même définition du "bug", je croyais que c'était grâce a l'Amiral(e) Grâce Hopper (Inventrice du COBOL)...
Heis Spiter, webmaster du site http://www.heisspiter.net
Développeur principal et administrateur du projet Bird Chat
Parti courir au bonheur du dév. public et GPL :D
Le Soldat Inconnu
Messages : 4312
Inscription : mer. 28/janv./2004 20:58
Localisation : Clermont ferrand OU Olsztyn
Contact :

Message par Le Soldat Inconnu »

les bug, c'est les cafards qui étaient attiré par la chaleur.
beurk, pourrait faire le ménage quand même. et éteindre toutes ces lumières. quelle gaspillage d'électricité. en plus, je suis sûre que malgré toutes ces lampes, il n'était même pas possible de bronzé devant son PC. :mrgreen: :lol:
Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?

[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

remarque, sa devait etre un bel ordi : tuner avec 18000 lampes!!! :lol:
Anonyme2
Messages : 3518
Inscription : jeu. 22/janv./2004 14:31
Localisation : Sourans

Message par Anonyme2 »

D'après la doc MS,

Windows NT, Windows 2000, et Windows XP utilise le codage unicode au niveau du système pour la manipulation des chaines et des caractères.

Par contre, comment Pb manipule-t-il les chaines de ces OS ?

Comment déterminer le type de chaine en cours ?
Comme tu as travaillé le sujet Nico, j'attend ton aide :D

Y a pas d'urgence, ca fait un moment que je me dit que je vais regarder ça de plus près mais là, c'est les vacances :D :D :D :D :D :D :D
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

Oh là, je dirais avec prudence que si le système est natif unicode alors c'est le système lui-même qui fait les transformations pour son traitement. Donc il va transformer l'ANSI -->unicode pour ses besoins automatiquement! (C'est bien la compatibilité :) )

:)
Répondre