mercredi 13 août 2014

Macro dans NotePad++ pour les caractères accentués et spéciaux

Notepad++ est un éditeur de code source qui prend en charge une grande variété de langages informatiques.

Notepad + + vous permet de créer des macros que vous pouvez utiliser pour effectuer des tâches répétitives.
En général, une macro est l'enregistrement d'une suite d'actions.

Il y deux méthodes pour créer une Macro dans Notepad++, soit à partir de l'éditeur de Notepad soit en éditant directement le fichier interne de l'éditeur.

Cet article propose un code d'une Macro qui remplace certains codes HTML par les caractères qui les correspondent.



Problème

Dans mon fichier XLM avec une déclaration d'encodage en 'utf-8' comme suit:
<?xml version="1.0" encoding="utf-8"?>
 des caractères accentuées s'affichent comme suit:

 'à'  s'affiche '&#195;&#160;'
 'â'  s'affiche '&#195;&#162;'

Solution

1-Comprendre le codage des caractères dans le fichier xml

Voila une réponse en anglais pour le même problème dans le site stackoverflow.com

To understand the "encoding" attribute, you have to understand the difference between bytes andcharacters.
Think of bytes as numbers between 0 and 255, whereas characters are things like "a", "1" and "Ä". The set of all characters that are available is called a character set.
Each character has a sequence of one or more bytes that are used to represent it; however, the exact number and value of the bytes depends on the encoding used and there are many different encodings.
Most encodings are based on an old character set and encoding called ASCII which is a single byte per character (actually, only 7 bits) and contains 128 characters including a lot of the common characters used in US English.
For example, here are 6 characters in the ASCII character set that are represented by the by values 60 to 65. The lowest value used is zero and the highest is 127 (both of these are hidden control characters).
Extract of ASCII Table 60-65
╔══════╦══════════════╗
║ Byte ║  Character   ║
╠══════╬══════════════║
║  60  ║      <       ║
║  61  ║      =       ║
║  62  ║      >       ║
║  63  ║      @       ║
║  64  ║      A       ║
║  65  ║      B       ║
╚══════╩══════════════╝
However, once you start needing more characters than the basic ASCII provides (for example, letters with accents, currency symbols, graphic symbols, etc.), ASCII is not suitable and you need something more extensive. You need more characters (a different character set) and you need a different encoding as 128 characters is not enough to fit all the characters in. Some encodings offer one byte (256 characters) or up to six bytes.
Over time a lot of encodings have been created. In the Windows world, there is CP1252, or ISO-8859-1, whereas Linux users tend to favour UTF-8. Java uses UTF-16 natively.
One sequence of byte values for a character in one encoding might stand for a completely different character in another encoding, or might even be invalid.
For example, in ISO 8859-1â is represented by one byte of value 226, whereas in UTF-8 it is two bytes: 195, 162. However, in ISO 8859-1195, 162 would be two characters, Ã, ¢.
Think of XML as not a sequence of characters but a sequence of bytes.
Imagine the system receiving the XML sees the bytes 195, 162. How does it know what characters these are?
In order for the system to interpret those bytes as actual characters (and so display them or convert them to another encoding), it needs to know the encoding used in the XML.
Since most common encodings are compatible with ASCII, as far as basic alphabetic characters and symbols go, in these cases, the declaration itself can get away with using only the ASCII characters to say what the encoding is. In other cases, the parser must try and figure out the encoding of the declaration. Since it knows the declaration begins with <?xml it is a lot easier to do this.
Finally, the version attribute specifies the XML version, of which there are two at the moment (seeWikipedia XML versions. There are slight differences between the versions, so an XML parser needs to know what it is dealing with. In most cases (for English speakers anyway), version 1.0 is sufficient.

Source: http://stackoverflow.com/questions/13743250/meaning-of-xml-version-1-0-encoding-utf-8
Site des codes UTF-8 : http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=dec

2-Créer une macro pour encoder les caractères spéciaux.


La liste ci-dessous présente les caractères spéciaux et leurs codes

Caractère en langage française UTF-8 encoding HTML Entity (Hexadecimal)
 à &#195;&#160; &#x00E0;
 â &#195;&#162; &#x00E2;
 ç &#195;&#167; &#x00E7;
 è &#195;&#168; &#x00E8;
 é &#195;&#169; &#x00E9;
 ê &#195;&#170; &#x00EA;
  î   &#195;&#174; &#x00EE;
 ô &#195;&#180; &#x00F4;
ù &#195;&#185; &#x00F9;
 û &#195;&#187; &#x00FB;

Le code pour remplacer '&#195;&#160;' par le caractère 'à' est le suivant:

  <Macro name="test" Ctrl="no" Alt="no" Shift="no" Key="0">
            <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
            <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#160;" />
            <Action type="3" message="1625" wParam="0" lParam="0" sParam="" />
            <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00E0;" />
            <Action type="3" message="1702" wParam="0" lParam="256" sParam="" />
            <Action type="3" message="1701" wParam="0" lParam="1608" sParam="" />
        </Macro>


Le code complet du macro est le suivant:
<Macro name="Remplacer1" Ctrl="no" Alt="no" Shift="no" Key="0">
  <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
  <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#160;" />
  <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
  <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00E0;" />
  <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
  <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
  <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
  <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#162;" />
  <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
  <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00E2;" />
  <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
  <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
  <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
  <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#167;" />
 <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
 <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00E7;" />
 <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
 <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
 <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
 <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#168;" />
 <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
 <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00E8;" />
 <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
 <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
 <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
 <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#169;" />
 <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
 <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00E9;" />
 <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
 <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
 <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
 <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#170;" />
 <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
 <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00EA;" />
 <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
 <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
 <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
 <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#174;" />
 <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
 <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00EE;" />
 <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
 <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
 <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
 <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#180;" />
 <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
 <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00F4;" />
 <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
 <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
 <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
 <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#185;" />
 <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
 <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00F9;" />
 <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
 <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
 <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
 <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#187;" />
 <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
 <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00FB;" />
 <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
 <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
 <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
 <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#187;" />
 <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
 <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00FB;" />
 <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
 <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
 <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
 <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#8825;" />
 <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
 <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00C7;" />
 <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
 <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
 <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
 <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#8364;" />
 <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
 <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00C0;" />
 <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
 <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
 <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
 <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#8240;" />
 <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
 <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x00C9;" />
 <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
 <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
 <Action type="3" message="1700" wParam="0" lParam="0" sParam="" />
 <Action type="3" message="1601" wParam="0" lParam="0" sParam="&amp;#195;&amp;#8220;" />
 <Action type="3" message="1625" wParam="0" lParam="2" sParam="" />
 <Action type="3" message="1602" wParam="0" lParam="0" sParam="&#x0153;" />
 <Action type="3" message="1702" wParam="0" lParam="768" sParam="" />
 <Action type="3" message="1701" wParam="0" lParam="1609" sParam="" />
</Macro>


Le code du macro doit être ajouté avant la balise fermante </macros>

Pour créer la macro dans Notepad++, allez dans le fichier shortcuts.xml qui se trouve dans C:\Users\VotreNomUtilisateur\AppData\Roaming\Notepad++\,  ce fichier peut être modifié manuellement pour créer de nouvelles macros.
Remarque Importante :
Il faut modifier le fichier shortcuts.xml avec un éditeur différent de Notepad++  sinon les modifications ne seront pas prises en considération.

Autres Ressources liées aux Macros:

Aucun commentaire:

Enregistrer un commentaire