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
    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
    Envie de voyage ?
    => http://cmarmonier.free.fr

  2. #22
    Expert éminent
    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

    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
    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
    ok, merci pour les infos
    Envie de voyage ?
    => http://cmarmonier.free.fr

  6. #26
    Candidat au Club
    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,'&#65533;;128;80;00C4;196;195.132;C384;Ä;LATIN CAPITAL LETTER A WITH DIAERESIS;Adieresis');
    push(@tab,'&#65533;;129;81;00C5;197;195.133;C385;Å;LATIN CAPITAL LETTER A WITH RING ABOVE;Aring');
    push(@tab,'&#65533;;130;82;00C7;199;195.135;C387;Ç;LATIN CAPITAL LETTER C WITH CEDILLA;Ccedilla');
    push(@tab,'&#65533;;131;83;00C9;201;195.137;C389;É;LATIN CAPITAL LETTER E WITH ACUTE;Eacute');
    push(@tab,'&#65533;;132;84;00D1;209;195.145;C391;Ñ;LATIN CAPITAL LETTER N WITH TILDE;Ntilde');
    push(@tab,'&#65533;;133;85;00D6;214;195.150;C396;Ö;LATIN CAPITAL LETTER O WITH DIAERESIS;Odieresis');
    push(@tab,'&#65533;;134;86;00DC;220;195.156;C39C;Ü;LATIN CAPITAL LETTER U WITH DIAERESIS;Udieresis');
    push(@tab,'&#65533;;135;87;00E1;225;195.161;C3A1;á;LATIN SMALL LETTER A WITH ACUTE;aacute');
    push(@tab,'&#65533;;136;88;00E0;224;195.160;C3A0;à;LATIN SMALL LETTER A WITH GRAVE;agrave');
    push(@tab,'&#65533;;137;89;00E2;226;195.162;C3A2;â;LATIN SMALL LETTER A WITH CIRCUMFLEX;acircumflex');
    push(@tab,'&#65533;;138;8A;00E4;228;195.164;C3A4;ä;LATIN SMALL LETTER A WITH DIAERESIS;adieresis');
    push(@tab,'&#65533;;138;8A;0160;352;197.160;C5A0;Š;LATIN CAPITAL LETTER S WITH CARON;Scaron');
    push(@tab,'&#65533;;139;8B;00E3;227;195.163;C3A3;ã;LATIN SMALL LETTER A WITH TILDE;atilde');
    push(@tab,'&#65533;;140;8C;00E5;229;195.165;C3A5;å;LATIN SMALL LETTER A WITH RING ABOVE;aring');
    push(@tab,'&#65533;;141;8D;00E7;231;195.167;C3A7;ç;LATIN SMALL LETTER C WITH CEDILLA;ccedilla');
    push(@tab,'&#65533;;142;8E;00E9;233;195.169;C3A9;é;LATIN SMALL LETTER E WITH ACUTE;eacute');
    push(@tab,'&#65533;;143;8F;00E8;232;195.168;C3A8;è;LATIN SMALL LETTER E WITH GRAVE;egrave');
    push(@tab,'&#65533;;144;90;00EA;234;195.170;C3AA;ê;LATIN SMALL LETTER E WITH CIRCUMFLEX;ecircumflex');
    push(@tab,'&#65533;;145;91;00EB;235;195.171;C3AB;ë;LATIN SMALL LETTER E WITH DIAERESIS;edieresis');
    push(@tab,'&#65533;;146;92;00ED;237;195.173;C3AD;í;LATIN SMALL LETTER I WITH ACUTE;iacute');
    push(@tab,'&#65533;;147;93;00EC;236;195.172;C3AC;ì;LATIN SMALL LETTER I WITH GRAVE;igrave');
    push(@tab,'&#65533;;148;94;00EE;238;195.174;C3AE;î;LATIN SMALL LETTER I WITH CIRCUMFLEX;icircumflex');
    push(@tab,'&#65533;;149;95;00EF;239;195.175;C3AF;ï;LATIN SMALL LETTER I WITH DIAERESIS;idieresis');
    push(@tab,'&#65533;;150;96;00F1;241;195.177;C3B1;ñ;LATIN SMALL LETTER N WITH TILDE;ntilde');
    push(@tab,'&#65533;;151;97;00F3;243;195.179;C3B3;ó;LATIN SMALL LETTER O WITH ACUTE;oacute');
    push(@tab,'&#65533;;152;98;00F2;242;195.178;C3B2;ò;LATIN SMALL LETTER O WITH GRAVE;ograve');
    push(@tab,'&#65533;;153;99;00F4;244;195.180;C3B4;ô;LATIN SMALL LETTER O WITH CIRCUMFLEX;ocircumflex');
    push(@tab,'&#65533;;154;9A;00F6;246;195.182;C3B6;ö;LATIN SMALL LETTER O WITH DIAERESIS;odieresis');
    push(@tab,'&#65533;;154;9A;0161;353;197.161;C5A1;š;LATIN SMALL LETTER S WITH CARON;scaron');
    push(@tab,'&#65533;;155;9B;00F5;245;195.181;C3B5;õ;LATIN SMALL LETTER O WITH TILDE;otilde');
    push(@tab,'&#65533;;156;9C;00FA;250;195.186;C3BA;ú;LATIN SMALL LETTER U WITH ACUTE;uacute');
    push(@tab,'&#65533;;157;9D;00F9;249;195.185;C3B9;ù;LATIN SMALL LETTER U WITH GRAVE;ugrave');
    push(@tab,'&#65533;;158;9E;00FB;251;195.187;C3BB;û;LATIN SMALL LETTER U WITH CIRCUMFLEX;ucircumflex');
    push(@tab,'&#65533;;159;9F;00FC;252;195.188;C3BC;ü;LATIN SMALL LETTER U WITH DIAERESIS;udieresis');
    push(@tab,'&#65533;;160;A0;2020;8224;226.128.160;E280A0;†;DAGGER;dagger');
    push(@tab,'&#65533;;161;A1;00B0;176;194.176;C2B0;°;DEGREE SIGN;degree');
    push(@tab,'&#65533;;162;A2;00A2;162;194.162;C2A2;¢;CENT SIGN;cent');
    push(@tab,'&#65533;;163;A3;00A3;163;194.163;C2A3;£;POUND SIGN;sterling');
    push(@tab,'&#65533;;164;A4;00A7;167;194.167;C2A7;§;SECTION SIGN;section');
    push(@tab,'&#65533;;165;A5;2022;8226;226.128.162;E280A2;•;BULLET;bullet');
    push(@tab,'&#65533;;166;A6;00B6;182;194.182;C2B6;¶;PILCROW SIGN;paragraph');
    push(@tab,'&#65533;;166;A6;A6;166;194.166;C2A6;¦;BROKEN BAR;brokenbar');
    push(@tab,'&#65533;;167;A7;00DF;223;195.159;C39F;ß;LATIN SMALL LETTER SHARP S;germandbls');
    push(@tab,'&#65533;;168;A8;00AE;174;194.174;C2AE;®;REGISTERED SIGN;registered');
    push(@tab,'&#65533;;169;A9;00A9;169;194.169;C2A9;©;COPYRIGHT SIGN;copyright');
    push(@tab,'&#65533;;170;AA;2122;8482;226.132.162;E284A2;™;TRADE MARK SIGN;trademark');
    push(@tab,'&#65533;;170;AA;2122;8482;226.132.162;E284A2;™;TRADE MARK SIGN;trademark');
    push(@tab,'&#65533;;171;AB;00B4;180;194.180;C2B4;´;ACUTE ACCENT;acute');
    push(@tab,'&#65533;;172;AC;00A8;168;194.168;C2A8;¨;DIAERESIS;dieresis');
    push(@tab,'&#65533;;173;AD;2260;8800;226.137.160;E289A0;&#8800;;NOT EQUAL TO;notequal');
    push(@tab,'&#65533;;174;AE;00C6;198;195.134;C386;Æ;LATIN CAPITAL LETTER AE;AE');
    push(@tab,'&#65533;;175;AF;00D8;216;195.152;C398;Ø;LATIN CAPITAL LETTER O WITH STROKE;Oslash');
    push(@tab,'&#65533;;176;B0;221E;8734;226.136.158;E2889E;&#8734;;INFINITY;infinity');
    push(@tab,'&#65533;;177;B1;00B1;177;194.177;C2B1;±;PLUS-MINUS SIGN;plusminus');
    push(@tab,'&#65533;;178;B2;2264;8804;226.137.164;E289A4;&#8804;;LESS-THAN OR EQUAL TO;lessequal');
    push(@tab,'&#65533;;178;B2;B2;178;194.178;C2B2;²;SUPERSCRIPT TWO;twosuperior');
    push(@tab,'&#65533;;179;B3;2265;8805;226.137.165;E289A5;&#8805;;GREATER-THAN OR EQUAL TO;greaterequal');
    push(@tab,'&#65533;;179;B3;B3;179;194.179;C2B3;³;SUPERSCRIPT THREE;threesuperior');
    push(@tab,'&#65533;;180;B4;00A5;165;194.165;C2A5;¥;YEN SIGN;yen');
    push(@tab,'&#65533;;181;B5;00B5;181;194.181;C2B5;µ;MICRO SIGN;mu');
    push(@tab,'&#65533;;182;B6;2202;8706;226.136.130;E28882;&#8706;;PARTIAL DIFFERENTIAL;partialdiff');
    push(@tab,'&#65533;;183;B7;2211;8721;226.136.145;E28891;&#8721;;N-ARY SUMMATION;summation');
    push(@tab,'&#65533;;184;B8;220F;8719;226.136.143;E2888F;&#8719;;N-ARY PRODUCT;product');
    push(@tab,'&#65533;;185;B9;03C0;960;207.128;CF80;&#960;;GREEK SMALL LETTER PI;pi');
    push(@tab,'&#65533;;185;B9;B9;185;194.185;C2B9;¹;SUPERSCRIPT ONE;onesuperior');
    push(@tab,'&#65533;;186;BA;222B;8747;226.136.171;E288AB;&#8747;;INTEGRAL;integral');
    push(@tab,'&#65533;;187;BB;00AA;170;194.170;C2AA;ª;FEMININE ORDINAL INDICATOR;ordfeminine');
    push(@tab,'&#65533;;188;BC;00BA;186;194.186;C2BA;º;MASCULINE ORDINAL INDICATOR;ordmasculine');
    push(@tab,'&#65533;;188;BC;BC;188;194.188;C2BC;¼;VULGAR FRACTION ONE QUARTER;onequarter');
    push(@tab,'&#65533;;189;BD;03A9;937;206.169;CEA9;&#937;;GREEK CAPITAL LETTER OMEGA;Omega');
    push(@tab,'&#65533;;189;BD;BD;189;194.189;C2BD;½;VULGAR FRACTION ONE HALF;onehalf');
    push(@tab,'&#65533;;190;BE;00E6;230;195.166;C3A6;æ;LATIN SMALL LETTER AE;ae');
    push(@tab,'&#65533;;190;BE;BE;190;194.190;C2BE;¾;VULGAR FRACTION THREE QUARTERS;threequarters');
    push(@tab,'&#65533;;191;BF;00F8;248;195.184;C3B8;ø;LATIN SMALL LETTER O WITH STROKE;oslash');
    push(@tab,'&#65533;;192;C0;00BF;191;194.191;C2BF;¿;INVERTED QUESTION MARK;questiondown');
    push(@tab,'&#65533;;193;C1;00A1;161;194.161;C2A1;¡;INVERTED EXCLAMATION MARK;exclamdown');
    push(@tab,'&#65533;;194;C2;00AC;172;194.172;C2AC;¬;NOT SIGN;logicalnot');
    push(@tab,'&#65533;;195;C3;221A;8730;226.136.154;E2889A;&#8730;;SQUARE ROOT;radical');
    push(@tab,'&#65533;;196;C4;0192;402;198.146;C692;ƒ;LATIN SMALL LETTER F WITH HOOK;florin');
    push(@tab,'&#65533;;197;C5;2248;8776;226.137.136;E28988;&#8776;;ALMOST EQUAL TO;approxequal');
    push(@tab,'&#65533;;198;C6;2206;8710;226.136.134;E28886;&#8710;;INCREMENT;Delta');
    push(@tab,'&#65533;;199;C7;00AB;171;194.171;C2AB;«;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;guillemotleft');
    push(@tab,'&#65533;;200;C8;00BB;187;194.187;C2BB;»;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;guillemotright');
    push(@tab,'&#65533;;201;C9;2026;8230;226.128.166;E280A6;…;HORIZONTAL ELLIPSIS;ellipsis');
    push(@tab,'&#65533;;202;CA;00A0;160;194.160;C2A0;*;NO-BREAK SPACE;nobreakspace');
    push(@tab,'&#65533;;203;CB;00C0;192;195.128;C380;À;LATIN CAPITAL LETTER A WITH GRAVE;Agrave');
    push(@tab,'&#65533;;204;CC;00C3;195;195.131;C383;Ã;LATIN CAPITAL LETTER A WITH TILDE;Atilde');
    push(@tab,'&#65533;;205;CD;00D5;213;195.149;C395;Õ;LATIN CAPITAL LETTER O WITH TILDE;Otilde');
    push(@tab,'&#65533;;206;CE;0152;338;197.146;C592;Œ;LATIN CAPITAL LIGATURE OE;OE');
    push(@tab,'&#65533;;207;CF;0153;339;197.147;C593;œ;LATIN SMALL LIGATURE OE;oe');
    push(@tab,'&#65533;;208;D0;2013;8211;226.128.147;E28093;–;EN DASH;endash');
    push(@tab,'&#65533;;208;D0;D0;208;195.144;C390;Ð;LATIN CAPITAL LETTER ETH;Eth');
    push(@tab,'&#65533;;209;D1;2014;8212;226.128.148;E28094;—;EM DASH;emdash');
    push(@tab,'&#65533;;210;D2;201C;8220;226.128.156;E2809C;“;LEFT DOUBLE QUOTATION MARK;quotedblleft');
    push(@tab,'&#65533;;211;D3;201D;8221;226.128.157;E2809D;”;RIGHT DOUBLE QUOTATION MARK;quotedblright');
    push(@tab,'&#65533;;212;D4;2018;8216;226.128.152;E28098;‘;LEFT SINGLE QUOTATION MARK;quoteleft');
    push(@tab,'&#65533;;213;D5;2019;8217;226.128.153;E28099;’;RIGHT SINGLE QUOTATION MARK;quoteright');
    push(@tab,'&#65533;;214;D6;00F7;247;195.183;C3B7;÷;DIVISION SIGN;divide');
    push(@tab,'&#65533;;215;D7;25CA;9674;226.151.138;E2978A;&#9674;;LOZENGE;lozenge');
    push(@tab,'&#65533;;215;D7;D7;215;195.151;C397;×;MULTIPLICATION SIGN;multiply');
    push(@tab,'&#65533;;216;D8;00FF;255;195.191;C3BF;ÿ;LATIN SMALL LETTER Y WITH DIAERESIS;ydieresis');
    push(@tab,'&#65533;;217;D9;0178;376;197.184;C5B8;Ÿ;LATIN CAPITAL LETTER Y WITH DIAERESIS;Ydieresis');
    push(@tab,'&#65533;;218;DA;2044;8260;226.129.132;E28184;&#8260;;FRACTION SLASH;fraction');
    push(@tab,'&#65533;;219;DB;20AC;8364;226.130.172;E282AC;€;EURO SIGN;currency');
    push(@tab,'&#65533;;220;DC;2039;8249;226.128.185;E280B9;‹;SINGLE LEFT-POINTING ANGLE QUOTATION MARK;guilsinglleft');
    push(@tab,'&#65533;;221;DD;203A;8250;226.128.186;E280BA;›;SINGLE RIGHT-POINTING ANGLE QUOTATION MARK;guilsinglright');
    push(@tab,'&#65533;;221;DD;DD;221;195.157;C39D;Ý;LATIN CAPITAL LETTER Y WITH ACUTE;Yacute');
    push(@tab,'&#65533;;222;DE;DE;222;195.158;C39E;Þ;LATIN CAPITAL LETTER THORN;Thorn');
    push(@tab,'&#65533;;222;DE;FB01;64257;239.172.129;EFAC81;&#64257;;LATIN SMALL LIGATURE FI;fi');
    push(@tab,'&#65533;;223;DF;FB02;64258;239.172.130;EFAC82;&#64258;;LATIN SMALL LIGATURE FL;fl');
    push(@tab,'&#65533;;224;E0;2021;8225;226.128.161;E280A1;‡;DOUBLE DAGGER;daggerdbl');
    push(@tab,'&#65533;;225;E1;00B7;183;194.183;C2B7;·;MIDDLE DOT;periodcentered');
    push(@tab,'&#65533;;226;E2;201A;8218;226.128.154;E2809A;‚;SINGLE LOW-9 QUOTATION MARK;quotesinglbase');
    push(@tab,'&#65533;;227;E3;201E;8222;226.128.158;E2809E;„;DOUBLE LOW-9 QUOTATION MARK;quotedblbase');
    push(@tab,'&#65533;;228;E4;2030;8240;226.128.176;E280B0;‰;PER MILLE SIGN;perthousand');
    push(@tab,'&#65533;;229;E5;00C2;194;195.130;C382;Â;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Acircumflex');
    push(@tab,'&#65533;;230;E6;00CA;202;195.138;C38A;Ê;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Ecircumflex');
    push(@tab,'&#65533;;231;E7;00C1;193;195.129;C381;Á;LATIN CAPITAL LETTER A WITH ACUTE;Aacute');
    push(@tab,'&#65533;;232;E8;00CB;203;195.139;C38B;Ë;LATIN CAPITAL LETTER E WITH DIAERESIS;Edieresis');
    push(@tab,'&#65533;;233;E9;00C8;200;195.136;C388;È;LATIN CAPITAL LETTER E WITH GRAVE;Egrave');
    push(@tab,'&#65533;;234;EA;00CD;205;195.141;C38D;Í;LATIN CAPITAL LETTER I WITH ACUTE;Iacute');
    push(@tab,'&#65533;;235;EB;00CE;206;195.142;C38E;Î;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Icircumflex');
    push(@tab,'&#65533;;236;EC;00CF;207;195.143;C38F;Ï;LATIN CAPITAL LETTER I WITH DIAERESIS;Idieresis');
    push(@tab,'&#65533;;237;ED;00CC;204;195.140;C38C;Ì;LATIN CAPITAL LETTER I WITH GRAVE;Igrave');
    push(@tab,'&#65533;;238;EE;00D3;211;195.147;C393;Ó;LATIN CAPITAL LETTER O WITH ACUTE;Oacute');
    push(@tab,'&#65533;;239;EF;00D4;212;195.148;C394;Ô;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Ocircumflex');
    push(@tab,'&#65533;;240;F0;F0;240;195.176;C3B0;ð;LATIN SMALL LETTER ETH;eth');
    push(@tab,'&#65533;;240;F0;F8FF;63743;239.163.191;EFA3BF;&#63743;;Apple logo;apple');
    push(@tab,'&#65533;;241;F1;00D2;210;195.146;C392;Ò;LATIN CAPITAL LETTER O WITH GRAVE;Ograve');
    push(@tab,'&#65533;;242;F2;00DA;218;195.154;C39A;Ú;LATIN CAPITAL LETTER U WITH ACUTE;Uacute');
    push(@tab,'&#65533;;243;F3;00DB;219;195.155;C39B;Û;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Ucircumflex');
    push(@tab,'&#65533;;244;F4;00D9;217;195.153;C399;Ù;LATIN CAPITAL LETTER U WITH GRAVE;Ugrave');
    push(@tab,'&#65533;;245;F5;0131;305;196.177;C4B1;&#305;;LATIN SMALL LETTER DOTLESS I;dotlessi');
    push(@tab,'&#65533;;246;F6;02C6;710;203.134;CB86;ˆ;MODIFIER LETTER CIRCUMFLEX ACCENT;circumflex');
    push(@tab,'&#65533;;247;F7;02DC;732;203.156;CB9C;˜;SMALL TILDE;tilde');
    push(@tab,'&#65533;;248;F8;00AF;175;194.175;C2AF;¯;MACRON;macron');
    push(@tab,'&#65533;;249;F9;02D8;728;203.152;CB98;&#728;;BREVE;breve');
    push(@tab,'&#65533;;250;FA;02D9;729;203.153;CB99;&#729;;DOT ABOVE;dotaccent');
    push(@tab,'&#65533;;251;FB;02DA;730;203.154;CB9A;&#730;;RING ABOVE;ring');
    push(@tab,'&#65533;;252;FC;00B8;184;194.184;C2B8;¸;CEDILLA;cedilla');
    push(@tab,'&#65533;;253;FD;02DD;733;203.157;CB9D;&#733;;DOUBLE ACUTE ACCENT;hungarumlaut');
    push(@tab,'&#65533;;253;FD;FD;253;195.189;C3BD;ý;LATIN SMALL LETTER Y WITH ACUTE;yacute');
    push(@tab,'&#65533;;254;FE;02DB;731;203.155;CB9B;&#731;;OGONEK;ogonek');
    push(@tab,'&#65533;;254;FE;FE;254;195.190;C3BE;þ;LATIN SMALL LETTER THORN;thorn');
    push(@tab,'&#65533;;255;FF;02C7;711;203.135;CB87;&#711;;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
    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
    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
    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
    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

    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
    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

    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.