IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Algorithmes et structures de données Discussion :

Détecter l'encodage d'un fichier texte


Sujet :

Algorithmes et structures de données

  1. #21
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    ok merci pour les infos.

    Maintenant j'ai assez d'infos je vais pouvoir me débrouiller.

    A la base c'etait pour détecter l'encodage de fichier html, donc voici ce que je vais faire :
    1- ouverture du fichier en UTF-8
    2- recherche de la balise html : meta http-equiv="Content-Type" => cette balise indique normalement le format d'encodage du fichier
    3- s'il n'y a pas la balise : essai de déterminer le format d'encodage avec la BOM du fichier
    4- s'il n'y a pas de BOM : il faut alors sélectionner manuellement le format

    Je voulais aussi le faire pour des fichiers .js et .css => ça sera la même chose à part qu'il n'y aura pas l'étape 2

  2. #22
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Voir aussi la directive <?xml version="1.0" encoding=""?>.

    En passant, il me semble me souvenir que l'HTML (enfin, HTTP) demande que le code soit declare (avec <?xml ou <meta ... ou que ce soit de l'ISO-8859-1)
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

  3. #23
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    oui, c'est du ISO-8859-1 par défaut si le content-type est "text".
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  4. #24
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut UTF8, CP1252, ... : quid
    Détecter l'encodage d'un fichier
    file -i <fichier texte> donne l'encodage d'un fichier texte (charset=...) à partir de sa version 4.0

    utrac -p <fichier> donne l'encodage d'un fichier texte (plus robuste et fonctionne sur plus de formats que file)
    utrac utilise un bon algorithme de détection des encodages.

    Convertir un fichier vers l'UTF-8 et inversement
    Utilisez le programme iconv en ligne de commande :
    iconv -f iso-8859-1 -t utf-8 <in >out # vers UTF-8
    iconv -f utf-8 -t iso-8859-1 <in >out # vers latin-1

    file, ultrac, iconv: sur uxland & cygwin ! of course !

  5. #25
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 249
    Points : 314
    Points
    314
    Par défaut
    ok, merci pour les infos

  6. #26
    Candidat au Club
    Inscrit en
    Mars 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Mars 2009
    Messages : 2
    Points : 2
    Points
    2
    Par défaut conversion,unicode,utf-8,encoding,h,dec,hx,U-hex,U-dec,UTF-dec,UTF-hx,lit,Unicode_nam
    Code Perl : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    #!/usr/bin/perl
     
    # usage:
    #	perl utf8tbl.pl > itf.sed
    #	cat foo.htm |tr /A-Z/ /a-z/ |sed -f itf.sed
     
    # version	Sat Apr  4 15:06:51 CEST 2009
     
    # <meta name="description" content="Conversion Unicode UTF-8 encoding">
    # <meta name="keywords" content="conversion,unicode,utf-8,encoding,h,dec,hx,U-hex,U-dec,UTF-dec,UTF-hx,lit,Unicode_name,PostScript_name">
     
    # source
    # <a href="http://www1.tip.nl/~t876506/utf8tbl.html" target="_blank">http://www1.tip.nl/~t876506/utf8tbl.html</a>
    # © Oscar van Vlijmen, 2000
    # o.van.vlijmen at tip.nl
    # URL-alias of this page: <a href="http://ovv.club.tip.nl" target="_blank">http://ovv.club.tip.nl</a>
    # and if this doesn't work: <a href="http://www1.tip.nl/~t876506/index.html" target="_blank">http://www1.tip.nl/~t876506/index.html</a>
    # or <a href="http://home-4.worldonline.nl/~t876506/index.html" target="_blank">http://home-4.worldonline.nl/~t876506/index.html</a>
     
    # ---------------------------------------------------------------------------------------------
    # --- milestones
    # perl $pTbx/utf8tbl.pl <inp > out
    # cat $pHtm/10.htm/*.htm* |sed -f  $pTbx/itf.sed  > a.t
    # cat $pHtm/*.htm* |tr /A-Z/ /a-z/  |sed -f  $pTbx/itf.sed  > a.t
    # perl utf8tbl.pl > itf.sed ; cat $pHtm/*.htm |tr /A-Z/ /a-z/ |sed -f itf.sed
     
    # ---------------------------------------------------------------------------------------------
    # --- hard's
    @key=qw(ch  dec  hx  U-hex  U-dec  UTF-dec  UTF-hx  lit  Unicode_name  PostScript_name);
     
    push(@tab,'�;128;80;00C4;196;195.132;C384;Ä;LATIN CAPITAL LETTER A WITH DIAERESIS;Adieresis');
    push(@tab,'�;129;81;00C5;197;195.133;C385;Å;LATIN CAPITAL LETTER A WITH RING ABOVE;Aring');
    push(@tab,'�;130;82;00C7;199;195.135;C387;Ç;LATIN CAPITAL LETTER C WITH CEDILLA;Ccedilla');
    push(@tab,'�;131;83;00C9;201;195.137;C389;É;LATIN CAPITAL LETTER E WITH ACUTE;Eacute');
    push(@tab,'�;132;84;00D1;209;195.145;C391;Ñ;LATIN CAPITAL LETTER N WITH TILDE;Ntilde');
    push(@tab,'�;133;85;00D6;214;195.150;C396;Ö;LATIN CAPITAL LETTER O WITH DIAERESIS;Odieresis');
    push(@tab,'�;134;86;00DC;220;195.156;C39C;Ü;LATIN CAPITAL LETTER U WITH DIAERESIS;Udieresis');
    push(@tab,'�;135;87;00E1;225;195.161;C3A1;á;LATIN SMALL LETTER A WITH ACUTE;aacute');
    push(@tab,'�;136;88;00E0;224;195.160;C3A0;à;LATIN SMALL LETTER A WITH GRAVE;agrave');
    push(@tab,'�;137;89;00E2;226;195.162;C3A2;â;LATIN SMALL LETTER A WITH CIRCUMFLEX;acircumflex');
    push(@tab,'�;138;8A;00E4;228;195.164;C3A4;ä;LATIN SMALL LETTER A WITH DIAERESIS;adieresis');
    push(@tab,'�;138;8A;0160;352;197.160;C5A0;Š;LATIN CAPITAL LETTER S WITH CARON;Scaron');
    push(@tab,'�;139;8B;00E3;227;195.163;C3A3;ã;LATIN SMALL LETTER A WITH TILDE;atilde');
    push(@tab,'�;140;8C;00E5;229;195.165;C3A5;å;LATIN SMALL LETTER A WITH RING ABOVE;aring');
    push(@tab,'�;141;8D;00E7;231;195.167;C3A7;ç;LATIN SMALL LETTER C WITH CEDILLA;ccedilla');
    push(@tab,'�;142;8E;00E9;233;195.169;C3A9;é;LATIN SMALL LETTER E WITH ACUTE;eacute');
    push(@tab,'�;143;8F;00E8;232;195.168;C3A8;è;LATIN SMALL LETTER E WITH GRAVE;egrave');
    push(@tab,'�;144;90;00EA;234;195.170;C3AA;ê;LATIN SMALL LETTER E WITH CIRCUMFLEX;ecircumflex');
    push(@tab,'�;145;91;00EB;235;195.171;C3AB;ë;LATIN SMALL LETTER E WITH DIAERESIS;edieresis');
    push(@tab,'�;146;92;00ED;237;195.173;C3AD;í;LATIN SMALL LETTER I WITH ACUTE;iacute');
    push(@tab,'�;147;93;00EC;236;195.172;C3AC;ì;LATIN SMALL LETTER I WITH GRAVE;igrave');
    push(@tab,'�;148;94;00EE;238;195.174;C3AE;î;LATIN SMALL LETTER I WITH CIRCUMFLEX;icircumflex');
    push(@tab,'�;149;95;00EF;239;195.175;C3AF;ï;LATIN SMALL LETTER I WITH DIAERESIS;idieresis');
    push(@tab,'�;150;96;00F1;241;195.177;C3B1;ñ;LATIN SMALL LETTER N WITH TILDE;ntilde');
    push(@tab,'�;151;97;00F3;243;195.179;C3B3;ó;LATIN SMALL LETTER O WITH ACUTE;oacute');
    push(@tab,'�;152;98;00F2;242;195.178;C3B2;ò;LATIN SMALL LETTER O WITH GRAVE;ograve');
    push(@tab,'�;153;99;00F4;244;195.180;C3B4;ô;LATIN SMALL LETTER O WITH CIRCUMFLEX;ocircumflex');
    push(@tab,'�;154;9A;00F6;246;195.182;C3B6;ö;LATIN SMALL LETTER O WITH DIAERESIS;odieresis');
    push(@tab,'�;154;9A;0161;353;197.161;C5A1;š;LATIN SMALL LETTER S WITH CARON;scaron');
    push(@tab,'�;155;9B;00F5;245;195.181;C3B5;õ;LATIN SMALL LETTER O WITH TILDE;otilde');
    push(@tab,'�;156;9C;00FA;250;195.186;C3BA;ú;LATIN SMALL LETTER U WITH ACUTE;uacute');
    push(@tab,'�;157;9D;00F9;249;195.185;C3B9;ù;LATIN SMALL LETTER U WITH GRAVE;ugrave');
    push(@tab,'�;158;9E;00FB;251;195.187;C3BB;û;LATIN SMALL LETTER U WITH CIRCUMFLEX;ucircumflex');
    push(@tab,'�;159;9F;00FC;252;195.188;C3BC;ü;LATIN SMALL LETTER U WITH DIAERESIS;udieresis');
    push(@tab,'�;160;A0;2020;8224;226.128.160;E280A0;†;DAGGER;dagger');
    push(@tab,'�;161;A1;00B0;176;194.176;C2B0;°;DEGREE SIGN;degree');
    push(@tab,'�;162;A2;00A2;162;194.162;C2A2;¢;CENT SIGN;cent');
    push(@tab,'�;163;A3;00A3;163;194.163;C2A3;£;POUND SIGN;sterling');
    push(@tab,'�;164;A4;00A7;167;194.167;C2A7;§;SECTION SIGN;section');
    push(@tab,'�;165;A5;2022;8226;226.128.162;E280A2;•;BULLET;bullet');
    push(@tab,'�;166;A6;00B6;182;194.182;C2B6;¶;PILCROW SIGN;paragraph');
    push(@tab,'�;166;A6;A6;166;194.166;C2A6;¦;BROKEN BAR;brokenbar');
    push(@tab,'�;167;A7;00DF;223;195.159;C39F;ß;LATIN SMALL LETTER SHARP S;germandbls');
    push(@tab,'�;168;A8;00AE;174;194.174;C2AE;®;REGISTERED SIGN;registered');
    push(@tab,'�;169;A9;00A9;169;194.169;C2A9;©;COPYRIGHT SIGN;copyright');
    push(@tab,'�;170;AA;2122;8482;226.132.162;E284A2;™;TRADE MARK SIGN;trademark');
    push(@tab,'�;170;AA;2122;8482;226.132.162;E284A2;™;TRADE MARK SIGN;trademark');
    push(@tab,'�;171;AB;00B4;180;194.180;C2B4;´;ACUTE ACCENT;acute');
    push(@tab,'�;172;AC;00A8;168;194.168;C2A8;¨;DIAERESIS;dieresis');
    push(@tab,'�;173;AD;2260;8800;226.137.160;E289A0;≠;NOT EQUAL TO;notequal');
    push(@tab,'�;174;AE;00C6;198;195.134;C386;Æ;LATIN CAPITAL LETTER AE;AE');
    push(@tab,'�;175;AF;00D8;216;195.152;C398;Ø;LATIN CAPITAL LETTER O WITH STROKE;Oslash');
    push(@tab,'�;176;B0;221E;8734;226.136.158;E2889E;∞;INFINITY;infinity');
    push(@tab,'�;177;B1;00B1;177;194.177;C2B1;±;PLUS-MINUS SIGN;plusminus');
    push(@tab,'�;178;B2;2264;8804;226.137.164;E289A4;≤;LESS-THAN OR EQUAL TO;lessequal');
    push(@tab,'�;178;B2;B2;178;194.178;C2B2;²;SUPERSCRIPT TWO;twosuperior');
    push(@tab,'�;179;B3;2265;8805;226.137.165;E289A5;≥;GREATER-THAN OR EQUAL TO;greaterequal');
    push(@tab,'�;179;B3;B3;179;194.179;C2B3;³;SUPERSCRIPT THREE;threesuperior');
    push(@tab,'�;180;B4;00A5;165;194.165;C2A5;¥;YEN SIGN;yen');
    push(@tab,'�;181;B5;00B5;181;194.181;C2B5;µ;MICRO SIGN;mu');
    push(@tab,'�;182;B6;2202;8706;226.136.130;E28882;∂;PARTIAL DIFFERENTIAL;partialdiff');
    push(@tab,'�;183;B7;2211;8721;226.136.145;E28891;∑;N-ARY SUMMATION;summation');
    push(@tab,'�;184;B8;220F;8719;226.136.143;E2888F;∏;N-ARY PRODUCT;product');
    push(@tab,'�;185;B9;03C0;960;207.128;CF80;π;GREEK SMALL LETTER PI;pi');
    push(@tab,'�;185;B9;B9;185;194.185;C2B9;¹;SUPERSCRIPT ONE;onesuperior');
    push(@tab,'�;186;BA;222B;8747;226.136.171;E288AB;∫;INTEGRAL;integral');
    push(@tab,'�;187;BB;00AA;170;194.170;C2AA;ª;FEMININE ORDINAL INDICATOR;ordfeminine');
    push(@tab,'�;188;BC;00BA;186;194.186;C2BA;º;MASCULINE ORDINAL INDICATOR;ordmasculine');
    push(@tab,'�;188;BC;BC;188;194.188;C2BC;¼;VULGAR FRACTION ONE QUARTER;onequarter');
    push(@tab,'�;189;BD;03A9;937;206.169;CEA9;Ω;GREEK CAPITAL LETTER OMEGA;Omega');
    push(@tab,'�;189;BD;BD;189;194.189;C2BD;½;VULGAR FRACTION ONE HALF;onehalf');
    push(@tab,'�;190;BE;00E6;230;195.166;C3A6;æ;LATIN SMALL LETTER AE;ae');
    push(@tab,'�;190;BE;BE;190;194.190;C2BE;¾;VULGAR FRACTION THREE QUARTERS;threequarters');
    push(@tab,'�;191;BF;00F8;248;195.184;C3B8;ø;LATIN SMALL LETTER O WITH STROKE;oslash');
    push(@tab,'�;192;C0;00BF;191;194.191;C2BF;¿;INVERTED QUESTION MARK;questiondown');
    push(@tab,'�;193;C1;00A1;161;194.161;C2A1;¡;INVERTED EXCLAMATION MARK;exclamdown');
    push(@tab,'�;194;C2;00AC;172;194.172;C2AC;¬;NOT SIGN;logicalnot');
    push(@tab,'�;195;C3;221A;8730;226.136.154;E2889A;√;SQUARE ROOT;radical');
    push(@tab,'�;196;C4;0192;402;198.146;C692;ƒ;LATIN SMALL LETTER F WITH HOOK;florin');
    push(@tab,'�;197;C5;2248;8776;226.137.136;E28988;≈;ALMOST EQUAL TO;approxequal');
    push(@tab,'�;198;C6;2206;8710;226.136.134;E28886;∆;INCREMENT;Delta');
    push(@tab,'�;199;C7;00AB;171;194.171;C2AB;«;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;guillemotleft');
    push(@tab,'�;200;C8;00BB;187;194.187;C2BB;»;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;guillemotright');
    push(@tab,'�;201;C9;2026;8230;226.128.166;E280A6;…;HORIZONTAL ELLIPSIS;ellipsis');
    push(@tab,'�;202;CA;00A0;160;194.160;C2A0;*;NO-BREAK SPACE;nobreakspace');
    push(@tab,'�;203;CB;00C0;192;195.128;C380;À;LATIN CAPITAL LETTER A WITH GRAVE;Agrave');
    push(@tab,'�;204;CC;00C3;195;195.131;C383;Ã;LATIN CAPITAL LETTER A WITH TILDE;Atilde');
    push(@tab,'�;205;CD;00D5;213;195.149;C395;Õ;LATIN CAPITAL LETTER O WITH TILDE;Otilde');
    push(@tab,'�;206;CE;0152;338;197.146;C592;Œ;LATIN CAPITAL LIGATURE OE;OE');
    push(@tab,'�;207;CF;0153;339;197.147;C593;œ;LATIN SMALL LIGATURE OE;oe');
    push(@tab,'�;208;D0;2013;8211;226.128.147;E28093;–;EN DASH;endash');
    push(@tab,'�;208;D0;D0;208;195.144;C390;Ð;LATIN CAPITAL LETTER ETH;Eth');
    push(@tab,'�;209;D1;2014;8212;226.128.148;E28094;—;EM DASH;emdash');
    push(@tab,'�;210;D2;201C;8220;226.128.156;E2809C;“;LEFT DOUBLE QUOTATION MARK;quotedblleft');
    push(@tab,'�;211;D3;201D;8221;226.128.157;E2809D;”;RIGHT DOUBLE QUOTATION MARK;quotedblright');
    push(@tab,'�;212;D4;2018;8216;226.128.152;E28098;‘;LEFT SINGLE QUOTATION MARK;quoteleft');
    push(@tab,'�;213;D5;2019;8217;226.128.153;E28099;’;RIGHT SINGLE QUOTATION MARK;quoteright');
    push(@tab,'�;214;D6;00F7;247;195.183;C3B7;÷;DIVISION SIGN;divide');
    push(@tab,'�;215;D7;25CA;9674;226.151.138;E2978A;◊;LOZENGE;lozenge');
    push(@tab,'�;215;D7;D7;215;195.151;C397;×;MULTIPLICATION SIGN;multiply');
    push(@tab,'�;216;D8;00FF;255;195.191;C3BF;ÿ;LATIN SMALL LETTER Y WITH DIAERESIS;ydieresis');
    push(@tab,'�;217;D9;0178;376;197.184;C5B8;Ÿ;LATIN CAPITAL LETTER Y WITH DIAERESIS;Ydieresis');
    push(@tab,'�;218;DA;2044;8260;226.129.132;E28184;⁄;FRACTION SLASH;fraction');
    push(@tab,'�;219;DB;20AC;8364;226.130.172;E282AC;€;EURO SIGN;currency');
    push(@tab,'�;220;DC;2039;8249;226.128.185;E280B9;‹;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;guilsinglleft');
    push(@tab,'�;221;DD;203A;8250;226.128.186;E280BA;›;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;guilsinglright');
    push(@tab,'�;221;DD;DD;221;195.157;C39D;Ý;LATIN CAPITAL LETTER Y WITH ACUTE;Yacute');
    push(@tab,'�;222;DE;DE;222;195.158;C39E;Þ;LATIN CAPITAL LETTER THORN;Thorn');
    push(@tab,'�;222;DE;FB01;64257;239.172.129;EFAC81;fi;LATIN SMALL LIGATURE FI;fi');
    push(@tab,'�;223;DF;FB02;64258;239.172.130;EFAC82;fl;LATIN SMALL LIGATURE FL;fl');
    push(@tab,'�;224;E0;2021;8225;226.128.161;E280A1;‡;DOUBLE DAGGER;daggerdbl');
    push(@tab,'�;225;E1;00B7;183;194.183;C2B7;·;MIDDLE DOT;periodcentered');
    push(@tab,'�;226;E2;201A;8218;226.128.154;E2809A;‚;SINGLE LOW-9 QUOTATION MARK;quotesinglbase');
    push(@tab,'�;227;E3;201E;8222;226.128.158;E2809E;„;DOUBLE LOW-9 QUOTATION MARK;quotedblbase');
    push(@tab,'�;228;E4;2030;8240;226.128.176;E280B0;‰;PER MILLE SIGN;perthousand');
    push(@tab,'�;229;E5;00C2;194;195.130;C382;Â;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Acircumflex');
    push(@tab,'�;230;E6;00CA;202;195.138;C38A;Ê;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Ecircumflex');
    push(@tab,'�;231;E7;00C1;193;195.129;C381;Á;LATIN CAPITAL LETTER A WITH ACUTE;Aacute');
    push(@tab,'�;232;E8;00CB;203;195.139;C38B;Ë;LATIN CAPITAL LETTER E WITH DIAERESIS;Edieresis');
    push(@tab,'�;233;E9;00C8;200;195.136;C388;È;LATIN CAPITAL LETTER E WITH GRAVE;Egrave');
    push(@tab,'�;234;EA;00CD;205;195.141;C38D;Í;LATIN CAPITAL LETTER I WITH ACUTE;Iacute');
    push(@tab,'�;235;EB;00CE;206;195.142;C38E;Î;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Icircumflex');
    push(@tab,'�;236;EC;00CF;207;195.143;C38F;Ï;LATIN CAPITAL LETTER I WITH DIAERESIS;Idieresis');
    push(@tab,'�;237;ED;00CC;204;195.140;C38C;Ì;LATIN CAPITAL LETTER I WITH GRAVE;Igrave');
    push(@tab,'�;238;EE;00D3;211;195.147;C393;Ó;LATIN CAPITAL LETTER O WITH ACUTE;Oacute');
    push(@tab,'�;239;EF;00D4;212;195.148;C394;Ô;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Ocircumflex');
    push(@tab,'�;240;F0;F0;240;195.176;C3B0;ð;LATIN SMALL LETTER ETH;eth');
    push(@tab,'�;240;F0;F8FF;63743;239.163.191;EFA3BF;;Apple logo;apple');
    push(@tab,'�;241;F1;00D2;210;195.146;C392;Ò;LATIN CAPITAL LETTER O WITH GRAVE;Ograve');
    push(@tab,'�;242;F2;00DA;218;195.154;C39A;Ú;LATIN CAPITAL LETTER U WITH ACUTE;Uacute');
    push(@tab,'�;243;F3;00DB;219;195.155;C39B;Û;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Ucircumflex');
    push(@tab,'�;244;F4;00D9;217;195.153;C399;Ù;LATIN CAPITAL LETTER U WITH GRAVE;Ugrave');
    push(@tab,'�;245;F5;0131;305;196.177;C4B1;ı;LATIN SMALL LETTER DOTLESS I;dotlessi');
    push(@tab,'�;246;F6;02C6;710;203.134;CB86;ˆ;MODIFIER LETTER CIRCUMFLEX ACCENT;circumflex');
    push(@tab,'�;247;F7;02DC;732;203.156;CB9C;˜;SMALL TILDE;tilde');
    push(@tab,'�;248;F8;00AF;175;194.175;C2AF;¯;MACRON;macron');
    push(@tab,'�;249;F9;02D8;728;203.152;CB98;˘;BREVE;breve');
    push(@tab,'�;250;FA;02D9;729;203.153;CB99;˙;DOT ABOVE;dotaccent');
    push(@tab,'�;251;FB;02DA;730;203.154;CB9A;˚;RING ABOVE;ring');
    push(@tab,'�;252;FC;00B8;184;194.184;C2B8;¸;CEDILLA;cedilla');
    push(@tab,'�;253;FD;02DD;733;203.157;CB9D;˝;DOUBLE ACUTE ACCENT;hungarumlaut');
    push(@tab,'�;253;FD;FD;253;195.189;C3BD;ý;LATIN SMALL LETTER Y WITH ACUTE;yacute');
    push(@tab,'�;254;FE;02DB;731;203.155;CB9B;˛;OGONEK;ogonek');
    push(@tab,'�;254;FE;FE;254;195.190;C3BE;þ;LATIN SMALL LETTER THORN;thorn');
    push(@tab,'�;255;FF;02C7;711;203.135;CB87;ˇ;CARON;caron');
     
     
    # --- check
    if(0) {
    foreach(@tab) {print "$_\n"} print "\n";
    foreach(@key) {print "$_\n"} print "\n";
    }
     
    # --- params
    #         0     1   2  3      4      5        6       7    8             9
    # @key=qw(ch  dec  hx  U-hex  U-dec  UTF-dec  UTF-hx  lit  Unicode_name  PostScript_name);
     
    # --- output
    print "# FROM: $U-hex PostScript_name\n\n";
    foreach(@tab) { @a=split(';');
    	# -- U-hex >
    	$w=lc(@a[9]);print "s/\&$w;/@a[7]/g;\n";
    	$w=lc(@a[3]);
    		print "s/\&#x$w;/@a[7]/g;\n";
    		if($w=~s/^00//){print "s/\&#x$w;/@a[7]/g;\n"}
    }
    print "\n";
     
    # --- finale
    exit 0;


  7. #27
    Membre à l'essai
    Profil pro
    Développeur Java
    Inscrit en
    Septembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2008
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    Bonjour,

    ce sujet comporte bon nombre de réponses aux questions que je me suis posé, en revanche, il y en a une qui me reste sur les bras:

    J'ai fais un programme java pour détecter l'encodage utf-8 de fichiers XML. Comme conseillé précédemment, je me sert du BOM pour effectuer cette vérification.

    Ce que je ne comprend pas, c'est que mon programme fonctionne sous windows, mais pas sous linux.

    En effet, lorsque j'affiche les six premiers octets de mon fichier utf-8 sous windows, à l'écran je vois apparaitre:

    byte0 : -17 | B
    byte1 : -69 | O
    byte2 : -65 | M
    byte3 : 60
    byte4 : 63
    byte5 : 120

    lorsque j'exécute le même programme, avec le même fichier sous linux, je vois apparaitre:


    byte0 : 63 | ?
    byte1 : 63 | ?
    byte2 : 63 | ?
    byte3 : 60
    byte4 : 63
    byte5 : 120

    Je ne comprend pas pourquoi les trois premiers octets ne sont pas interprétés de la même manière sous windows et sous linux..

    Avez-vous une idée?

    J'utilise Java 1.6 avec une base db2 9.5
    testé sur windows XP et red hat entreprise v5.3

  8. #28
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    Pour la place des octets, il y a le fait de l'indanness, opposée entre Windows et Linux.

    D'autre part, les fichiers "texte" n'ont pas la même terminaison de lignes sous les 2 environnements..
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  9. #29
    Membre à l'essai
    Profil pro
    Développeur Java
    Inscrit en
    Septembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2008
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    Mon problème ici est vraiment basé sur l'interprétation du BOM qui n'est pas la même sous Windows et sous linux. Pour moi, un octet est un octet que ce soit sous windows ou linux l'octet devrait avoir la même valeur..

    De plus, j'ai recherché le terme "indanness", sans succès, il y a bien un "Endianness" mais celui-ci fait réference à l'encodage Endian..

    Une autre idée?

  10. #30
    Membre à l'essai
    Profil pro
    Développeur Java
    Inscrit en
    Septembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2008
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    J'ai trouvé solution à mon problème:

    je récupérais les octets de mon fichier à l'aide d'un getByte() sans paramètre, qui a priori n'est pas interprété de la même manière sous windows et sous linux (pourquoi et comment j'en sais rien..)

    En passant en paramètre l'encodage utilisé, je retrouve le même résultat sous les deux environnements.

    Voici ce que j'ai utilisé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    byte[] byteTab =  chaineBuffer.getBytes("iso8859-15");
    ce qui me donne sous les deux environnements:

    byte0 : -17
    byte1 : -69
    byte2 : -65
    byte3 : 60
    byte4 : 63
    byte5 : 120

    Ce qu'il y a d'étrange c'est que lorsque je passe en paramètre "utf8", j'obtiens:

    byte0 : -61
    byte1 : -81
    byte2 : -62
    byte3 : -69
    byte4 : -62
    byte5 : -65
    byte6 : 60
    byte7 : 63
    byte8 : 120

    Le BOM n'est plus interprété sur 3 octets, mais sur six octets..?

    Mon problème est résolu, mais j'aurais tout de même voulu comprendre le pourquoi, si l'un d'entre vous a une opinion..

  11. #31
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par X-Wing Voir le message
    Mon problème est résolu, mais j'aurais tout de même voulu comprendre le pourquoi, si l'un d'entre vous a une opinion..
    Il faudrait voir le code, en particulier pour savoir comment tu as fait pour lire le fichier et pour créer "chaineBuffer".

    Vu les valeurs que tu listes, je dirais que la version Linux contient des valeurs sur 7 bits (0...127) alors que la version Windows contient des valeurs 8 bits signées (-128...127)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  12. #32
    Membre à l'essai
    Profil pro
    Développeur Java
    Inscrit en
    Septembre 2008
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2008
    Messages : 14
    Points : 17
    Points
    17
    Par défaut
    je récupère mon chaineBuffer de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(fichier), "iso8859-15"));
     
    chaineBuffer = bufferedReader.readLine();
     
    byte[] byteTab =  chaineBuffer.getBytes("iso8859-15");
    Je trouve ça étrange de devoir re-préciser la norme dans le getBytes pour que ca fonctionne..

  13. #33
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par X-Wing Voir le message
    je récupère mon chaineBuffer de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(fichier), "iso8859-15"));
     
    chaineBuffer = bufferedReader.readLine();
     
    byte[] byteTab =  chaineBuffer.getBytes("iso8859-15");
    Je trouve ça étrange de devoir re-préciser la norme dans le getBytes pour que ca fonctionne..
    pourquoi ne pas mettre d'abord le flux dans un tableau, et ensuite convertir le tableau en String ?

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    byte[] data = new byte[(int)file.length()];
    FileInputStream fis = new FileInputStream(file);
    fis.read(data);
    fis.close();
     
    String s = new String(data, "your-encoding-there");
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. AIX - Détecter l'encodage d'un fichier texte
    Par vbonnin dans le forum AIX
    Réponses: 1
    Dernier message: 22/08/2015, 12h22
  2. Réponses: 9
    Dernier message: 12/07/2011, 17h25
  3. Réponses: 2
    Dernier message: 19/10/2009, 21h36
  4. Comment connaître l'encodage d'un fichier texte?
    Par sergentgarcia dans le forum Général Python
    Réponses: 3
    Dernier message: 26/05/2008, 10h41
  5. Gérer l'encodage d'un fichier texte
    Par MITCH31 dans le forum VB 6 et antérieur
    Réponses: 19
    Dernier message: 15/05/2007, 10h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo