Accueil > > > ENCODER UNE URL EN UTF8 DEPUIS WORD
ENCODER UNE URL EN UTF8 DEPUIS WORD
Information sur la source
Description
Si on veut créer des URL correctes dans Word, il est nécessaire d'encoder convenablement tout ce qui n'est pas un caractère ASCII. Pour tous les caractères de plus de 7 bits, il faut utiliser le codage UTF8. Voir à ce sujet l'exellente page de Wikipedia http://fr.wikipedia.org/wiki/Utf8 Cette fontion n'existe pas en VB6. J'en ai écrit une, EncodeUTF8 ci-dessous, qui à l'air de bien marcher. Nota pour les curieux : Il y a des bien fonctions pour cela en .net, mais depuis les applications Office (même Office 2007 !), c'est du VB6 qui est utilisé pour programmer les macros. Au hasard, copier, coller, sélectionner dans Word un peu de Chinois pour essayer 西藏精神领& #34966;达赖喇嘛八 6085;呼吁藏人冷ƃ 45;
Source
- Sub Google()
- '
- ' Google Macro
- ' Macro enregistrée le 21/02/2008 par VBsnail
- Dim Utf8 As String
- TexteSelectionne = ""
- Text = Selection.Text
- i = 1
- For i = 1 To Len(Text)
- car = Mid(Text, i, 1)
- TexteSelectionne = TexteSelectionne + EncodeUTF8(car)
- Next i
- 'debug MsgBox (TexteSelectionne)
-
- ' %22 c'est le guillement " à mettre en début et en fin de chaîne pour forcer la recherche Google sur la chaîne entière
- URL = "http://www.google.com/search?q=%22" & TexteSelectionne & "%22"
- ' MsgBox (Len(URL))
- ' Attention, si la longueur dépassse 487, l'url transmise est tronquée.
- ' Limitation liée à la taille de l'URL que Word accepte d'associer au texte. A éclaircir
- ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
- URL, SubAddress:="", ScreenTip:="", _
- TextToDisplay:=Selection.Text
- End Sub
-
- Public Function EncodeUTF8(ByVal car As String) As String
- CarVal = AscW(car)
- If CarVal < 0 Then CarVal = CarVal + 65536
- 'Ce IF, c'est pour éviter d'avoir un nombre négatif pour un code point >7fff
- If CarVal < 128 Then 'Cas ASCII, codage sur 1 octet, 7 bits significatifs
- EncodeUTF8 = car
- Exit Function
- End If
- If CarVal < 2048 Then 'Cas du codage sur 2 octets, de 8 à 11 bits significatifs (5 bits puis 6 bits)
- Sextet = 128 + CarVal Mod 64
- CarVal = CarVal \ 64
- Quintet = 192 + CarVal
- EncodeUTF8 = "%" + Hex(Quintet) + "%" + Hex(Sextet)
- Exit Function
- End If
- 'cas du codage sur 3 octets, de 12 à 16 bits significatifs, (4 bits, 6 bits, 6bits)
- Sextet2 = 128 + CarVal Mod 64
- CarVal = CarVal \ 64
- Sextet1 = 128 + CarVal Mod 64
- CarVal = CarVal \ 64
- Quartet = 224 + CarVal
- EncodeUTF8 = "%" + Hex(Quartet) + "%" + Hex(Sextet1) + "%" + Hex(Sextet2)
- ' A ma connaisssnace, Windows ne gère pas de caractères Unicode au déla de U+FFFD, représenté par un rectangle vide
- ' de toutes façons, l'Unicode est codé sur 2 octets !!!
- ' Il n'est donc pas nécessaire de prévoir le cas du codage sur 4 octets
- End Function
Sub Google()
'
' Google Macro
' Macro enregistrée le 21/02/2008 par VBsnail
Dim Utf8 As String
TexteSelectionne = ""
Text = Selection.Text
i = 1
For i = 1 To Len(Text)
car = Mid(Text, i, 1)
TexteSelectionne = TexteSelectionne + EncodeUTF8(car)
Next i
'debug MsgBox (TexteSelectionne)
' %22 c'est le guillement " à mettre en début et en fin de chaîne pour forcer la recherche Google sur la chaîne entière
URL = "http://www.google.com/search?q=%22" & TexteSelectionne & "%22"
' MsgBox (Len(URL))
' Attention, si la longueur dépassse 487, l'url transmise est tronquée.
' Limitation liée à la taille de l'URL que Word accepte d'associer au texte. A éclaircir
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, Address:= _
URL, SubAddress:="", ScreenTip:="", _
TextToDisplay:=Selection.Text
End Sub
Public Function EncodeUTF8(ByVal car As String) As String
CarVal = AscW(car)
If CarVal < 0 Then CarVal = CarVal + 65536
'Ce IF, c'est pour éviter d'avoir un nombre négatif pour un code point >7fff
If CarVal < 128 Then 'Cas ASCII, codage sur 1 octet, 7 bits significatifs
EncodeUTF8 = car
Exit Function
End If
If CarVal < 2048 Then 'Cas du codage sur 2 octets, de 8 à 11 bits significatifs (5 bits puis 6 bits)
Sextet = 128 + CarVal Mod 64
CarVal = CarVal \ 64
Quintet = 192 + CarVal
EncodeUTF8 = "%" + Hex(Quintet) + "%" + Hex(Sextet)
Exit Function
End If
'cas du codage sur 3 octets, de 12 à 16 bits significatifs, (4 bits, 6 bits, 6bits)
Sextet2 = 128 + CarVal Mod 64
CarVal = CarVal \ 64
Sextet1 = 128 + CarVal Mod 64
CarVal = CarVal \ 64
Quartet = 224 + CarVal
EncodeUTF8 = "%" + Hex(Quartet) + "%" + Hex(Sextet1) + "%" + Hex(Sextet2)
' A ma connaisssnace, Windows ne gère pas de caractères Unicode au déla de U+FFFD, représenté par un rectangle vide
' de toutes façons, l'Unicode est codé sur 2 octets !!!
' Il n'est donc pas nécessaire de prévoir le cas du codage sur 4 octets
End Function
Conclusion
Je sais, je sais, ce code n'est pas optimal, ni très propre. mais enfin il a l'air de marcher.
Historique
- 19 mars 2008 14:10:26 :
- Cas codage sur deux octetes: correction de la constant pour les poids forts du premier octet.
- 19 mars 2008 14:11:01 :
- Cas codage sur deux octets: correction de la constant pour les poids forts du premier octet.
Sources du même auteur
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Lancer une macro au démarrage d'un fichier Word [ par Super Franck ]
Comment lancer automatiquement une macro au démarrage d'un fichier Word
Macro Word: insertion champs de fusion [ par Laurent ]
J'ai besoin d'écrire une macro qui me permette d'insérer dans mon document word un champ de fusion qui pourra prendre deux valeurs lors de la fusion e
executer macro word à l'ouverture de word [ par kkm ]
SVP,Je souhaite executer une fusionde doc sous word en la lançant à partir d'un formulaire vb. Par exemple un utilisateur A clique sur un bouton qui f
editer un formulaire WORD depuis macro EXCEL [ par Yann ]
Bonjour tous,De cherche désespérément la commande qui me permettra de modifier un texte dans un fichier word en mode formulaire.j'arrive à atteindre l
pb de macro word + formulaire [ par steph ]
Bonjour Ce que je veux faire : Je rempli un formulaire (fait sous vb editor)Puis chaque zone de ce formulaire je le positionnne a un endroit bien pr
Lancer macro word automatiquement [ par one ]
Bonjour,Je suis un debutant en VBA. Voila j'ai developpe une appli avec word (alt+f11). Le probleme est que pour lancer cet appli je suis oblige de pa
MACRO WORD !! need help !! [ par kimsRE ]
help me !!!comment tester dans une macro word en vb si on est sur la derniere page d'un document ???exemple : verifier ke dans un document de X je sui
MACRO WORD !! need help !! [ par kimsRE ]
help me !!!comment tester dans une macro word en vb si on est sur la derniere page d'un document ???exemple : verifier ke dans un document de X je sui
Pb de bibliothèque dans une macro Word [ par rutabaga ]
J'ai écrit une macro Word AutoNew. Elle fonctionne parfaitement sur ma bécanne. Quand j'installe le .dot contenant cette macro sur d'autres bécannes a
Pb Word vba et impression en nombre [ par Lunacy ]
j'utilise NT4 SP6 Word 2000J'ai une imprimante ( par défaut ) pour convertir en PDF ( type PDFWRITER )j'ai fait une macro qui automatise le traitement
|
Derniers Blogs
[HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] SLIDES ET DéMOS : AUTOUR DU W3C , NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Très bonne après-midi passée lors cette conférence avec le W3C, organisée par L' Inria sur les nouveaux standards, ce Mardi 14 Février, on sent vraiment que çà bosse au W3C, et l'avenir est très très prometteur pour le HTML5, notamment ...
Cliquez pour lire la suite de l'article par Gio GESTION D'EXCEPTION AVEC LES TASKSGESTION D'EXCEPTION AVEC LES TASKS par richardc
Nous avons vu dans un précédent article comment utiliser Task pour effectuer des opérations dans un autre thread.
Malheureusement, comme tout le monde n'est pas parfait, il se peut que cette exécution se passe mal et qu'une exception se produise.
La...
Cliquez pour lire la suite de l'article par richardc DéMARRONS AVEC LES TASKSDéMARRONS AVEC LES TASKS par richardc
Que vous le vouliez ou non, le développement multi-tâche est maintenant une obligation pour toute nouvelle application. Il est donc vital d'en comprendre les mécanismes et de s'y mettre le plus tôt possible.
En attendant le .NET Framework 4.5 avec le...
Cliquez pour lire la suite de l'article par richardc SLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPSSLIDE & DéMO TECHDAYS 2012 - FAST & FURIOUS XAML APPS par Vko
Retrouvez les slides et les démo de ma session Fast & Furious XAML Apps. A ceux qui se posent la question : "est-ce que le code de la DataGrid est disponible?", je vous répondrais "pas encore". Je vais mettre en place un projet codeplex pour part...
Cliquez pour lire la suite de l'article par Vko XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|