Page 1 sur 1

Ansi<-->Unicode

Publié : mer. 21/avr./2004 21:31
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
:)

Publié : jeu. 22/avr./2004 10:05
par Fred
Pratique ! :)

Publié : ven. 23/avr./2004 16:01
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 ...

Publié : sam. 24/avr./2004 10:28
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/

Publié : sam. 24/avr./2004 10:34
par Le Soldat Inconnu
ok merci, donc c'est ces fichus amerloques qui ont mis le bazar :mrgreen:

Publié : sam. 24/avr./2004 10:43
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

:)

Publié : sam. 24/avr./2004 10:55
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 :)

Publié : sam. 24/avr./2004 11:10
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)...

Publié : sam. 24/avr./2004 11:16
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:

Publié : sam. 24/avr./2004 11:17
par cederavic
remarque, sa devait etre un bel ordi : tuner avec 18000 lampes!!! :lol:

Publié : jeu. 29/juil./2004 18:16
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

Publié : jeu. 29/juil./2004 19:09
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é :) )

:)