Home > Sysadmin > Astuce : trouver le caractère UTF8 associé à un code hexa

Astuce : trouver le caractère UTF8 associé à un code hexa

December 29th, 2011 Leave a comment Go to comments

Dans mes péripéties mod_security, j’ai eu l’erreur suivante :


[Thu Dec 29 08:44:22 2011] [error] [client xx.21.3.31] ModSecurity: Warning. Pattern match "\\W{4,}" at ARGS:typeLibelle. [file "/usr/local/apache2/conf/crs/activated_rules/modsecurity_crs_41_sql_injection_attacks.conf"] [line "507"] [id "960024"] [rev "2.2.2"] [msg "SQL Character Anomaly Detection Alert - Repetative Non-Word Characters"] [data " \\xc3\\xa0 "] [hostname "dev.xxxx.fr"] [uri "/xxxx"] [unique_id "TvwaVgpArWEAAHu7CtMAAAAG"]

Et la question qui tue : à quoi correspond \\xc3\\xa0 ? Je me doutais que c’était un caractère UTF8, j’ai donc demandé à mon expert jeu de caractères (aka Laurent Blume) qui m’a donné l’astuce suivante :

  • Avant tout, avoir un système en UTF-8
  • Lancer vim (pas besoin d’ouvrir un fichier)
  • Taper un caractère accentué, par exemple é
  • Convertir en hexadécimal à l’aide de la commande “:%!xxd”, ce qui va donner quelque chose du genre “0000000: c3a9 0a”
  • Modifier le c3a9 en c3a0
  • Reconvertir en texte, à l’aide de la commande “:%!xxd -r”, et miracle on obtient le caractère “à” !
Categories: Sysadmin Tags:
  1. December 31st, 2011 at 16:54 | #1

    Moi, je suis un dev bête, alors j’ouvre ma console Scala, et je tappe:

    scala> new String(Array(0xc3.toByte,0xa0.toByte))
    res0: java.lang.String = à
    

    (on peut aussi faire new String(Array(0xc3,0xa0).map(_.toByte)), mais on va encore dire que Scala c’est trop compliqué)

    Ca doit marcher avec d’autres console (Groovy et autre) !

    (oui, j’ai plus souvent une console Scala d’ouverte qu’un Vim :)

    Bonne année,

  2. Cyrille Lefevre
    July 16th, 2012 at 23:41 | #2

    doit fonctionner sur toute fenêtre configurée en UTF-8 :

    via printf :

    printf ‘\xc3\xa0′

    via le shell :

    printf $’\xc3\xa0′

    alternative moins portable (bash) :

    echo -e ‘\xc3\xa0′

    idem en ksh (88/93) :

    typeset -i8 a=16#c3 b=16#a0
    print “\${a#8\#}\${b#8\#}”

  3. July 17th, 2012 at 23:06 | #3

    Comme quoi, y a très simple !

  1. No trackbacks yet.