This file is indexed.

/usr/share/doc/HOWTO/fr-html/Unicode-HOWTO.html is in doc-linux-fr-html 2013.01-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

   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
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 354
 355
 356
 357
 358
 359
 360
 361
 362
 363
 364
 365
 366
 367
 368
 369
 370
 371
 372
 373
 374
 375
 376
 377
 378
 379
 380
 381
 382
 383
 384
 385
 386
 387
 388
 389
 390
 391
 392
 393
 394
 395
 396
 397
 398
 399
 400
 401
 402
 403
 404
 405
 406
 407
 408
 409
 410
 411
 412
 413
 414
 415
 416
 417
 418
 419
 420
 421
 422
 423
 424
 425
 426
 427
 428
 429
 430
 431
 432
 433
 434
 435
 436
 437
 438
 439
 440
 441
 442
 443
 444
 445
 446
 447
 448
 449
 450
 451
 452
 453
 454
 455
 456
 457
 458
 459
 460
 461
 462
 463
 464
 465
 466
 467
 468
 469
 470
 471
 472
 473
 474
 475
 476
 477
 478
 479
 480
 481
 482
 483
 484
 485
 486
 487
 488
 489
 490
 491
 492
 493
 494
 495
 496
 497
 498
 499
 500
 501
 502
 503
 504
 505
 506
 507
 508
 509
 510
 511
 512
 513
 514
 515
 516
 517
 518
 519
 520
 521
 522
 523
 524
 525
 526
 527
 528
 529
 530
 531
 532
 533
 534
 535
 536
 537
 538
 539
 540
 541
 542
 543
 544
 545
 546
 547
 548
 549
 550
 551
 552
 553
 554
 555
 556
 557
 558
 559
 560
 561
 562
 563
 564
 565
 566
 567
 568
 569
 570
 571
 572
 573
 574
 575
 576
 577
 578
 579
 580
 581
 582
 583
 584
 585
 586
 587
 588
 589
 590
 591
 592
 593
 594
 595
 596
 597
 598
 599
 600
 601
 602
 603
 604
 605
 606
 607
 608
 609
 610
 611
 612
 613
 614
 615
 616
 617
 618
 619
 620
 621
 622
 623
 624
 625
 626
 627
 628
 629
 630
 631
 632
 633
 634
 635
 636
 637
 638
 639
 640
 641
 642
 643
 644
 645
 646
 647
 648
 649
 650
 651
 652
 653
 654
 655
 656
 657
 658
 659
 660
 661
 662
 663
 664
 665
 666
 667
 668
 669
 670
 671
 672
 673
 674
 675
 676
 677
 678
 679
 680
 681
 682
 683
 684
 685
 686
 687
 688
 689
 690
 691
 692
 693
 694
 695
 696
 697
 698
 699
 700
 701
 702
 703
 704
 705
 706
 707
 708
 709
 710
 711
 712
 713
 714
 715
 716
 717
 718
 719
 720
 721
 722
 723
 724
 725
 726
 727
 728
 729
 730
 731
 732
 733
 734
 735
 736
 737
 738
 739
 740
 741
 742
 743
 744
 745
 746
 747
 748
 749
 750
 751
 752
 753
 754
 755
 756
 757
 758
 759
 760
 761
 762
 763
 764
 765
 766
 767
 768
 769
 770
 771
 772
 773
 774
 775
 776
 777
 778
 779
 780
 781
 782
 783
 784
 785
 786
 787
 788
 789
 790
 791
 792
 793
 794
 795
 796
 797
 798
 799
 800
 801
 802
 803
 804
 805
 806
 807
 808
 809
 810
 811
 812
 813
 814
 815
 816
 817
 818
 819
 820
 821
 822
 823
 824
 825
 826
 827
 828
 829
 830
 831
 832
 833
 834
 835
 836
 837
 838
 839
 840
 841
 842
 843
 844
 845
 846
 847
 848
 849
 850
 851
 852
 853
 854
 855
 856
 857
 858
 859
 860
 861
 862
 863
 864
 865
 866
 867
 868
 869
 870
 871
 872
 873
 874
 875
 876
 877
 878
 879
 880
 881
 882
 883
 884
 885
 886
 887
 888
 889
 890
 891
 892
 893
 894
 895
 896
 897
 898
 899
 900
 901
 902
 903
 904
 905
 906
 907
 908
 909
 910
 911
 912
 913
 914
 915
 916
 917
 918
 919
 920
 921
 922
 923
 924
 925
 926
 927
 928
 929
 930
 931
 932
 933
 934
 935
 936
 937
 938
 939
 940
 941
 942
 943
 944
 945
 946
 947
 948
 949
 950
 951
 952
 953
 954
 955
 956
 957
 958
 959
 960
 961
 962
 963
 964
 965
 966
 967
 968
 969
 970
 971
 972
 973
 974
 975
 976
 977
 978
 979
 980
 981
 982
 983
 984
 985
 986
 987
 988
 989
 990
 991
 992
 993
 994
 995
 996
 997
 998
 999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">
<meta name="GENERATOR" content="LinuxDoc-Tools 0.9.69">
<title>HOWTO Unicode</title>
</head>
<body>
<h1>HOWTO Unicode</h1>
<h2>Bruno Haible, <a href=
"mailto:haible@clisp.cons.org">&lt;haible@clisp.cons.org&gt;</a>,
traduction&nbsp;: Samuel Tribehou, <a href=
"mailto:samuel-tribehou@mail.cpod.fr">&lt;samuel-tribehou@mail.cpod.fr&gt;</a><br>
</h2>
v 0.12, 19 Octobre 1999
<hr>
<em>Ce document explique comment configurer votre syst&egrave;me
Linux pour qu'il utilise l'encodage de texte UTF-8. Ce document est
en cours d'&eacute;laboration. Toutes les astuces, suggestions,
patchs, URLs sont les bienvenus. NDT&nbsp;: Il a &eacute;t&eacute;
convenu avec l'auteur que seule la pr&eacute;sente version de ce
document serait traduite dans un premier temps, le contenu
changeant pour l'instant trop souvent pour qu'une traduction suivie
puisse &ecirc;tre r&eacute;alis&eacute;e. Reportez vous au site du
LDP pour obtenir la derni&egrave;re version.</em>
<hr>
<h2><a name="s1">1. Introduction</a></h2>
<h2><a name="ss1.1">1.1 Pourquoi Unicode&nbsp;?</a></h2>
<p>Les gens de diff&eacute;rents pays utilisent diff&eacute;rents
caract&egrave;res pour repr&eacute;senter les mots de leur langue
natale. De nos jours la plupart des applications, y compris les
logiciels de courrier &eacute;lectronique et les navigateurs,
traitent correctement les caract&egrave;res 8-bits. Ils peuvent
donc traiter et afficher du texte correctement &agrave; condition
qu'il soit repr&eacute;sent&eacute; dans un jeu de
caract&egrave;res 8-bits, comme ISO-8859-1.</p>
<p>Il y a bien plus de 256 caract&egrave;res dans le monde - pensez
au cyrillique, &agrave; l'h&eacute;breu, &agrave; l'arabe, au
chinois, au japonais au cor&eacute;en et au tha&iuml; -, et de
temps &agrave; autres, de nouveaux caract&egrave;res sont
invent&eacute;s. Les probl&egrave;mes que cela induit pour les
utilisateurs sont les suivants &nbsp;:</p>
<ul>
<li>Il est impossible de stocker du texte avec des jeux de
caract&egrave;res diff&eacute;rents dans le m&ecirc;me document.
Par exemple, je peux citer des journaux russes dans une publication
allemande ou fran&ccedil;aise si j'utilise TeX, xdvi et Postscript,
mais je ne peux pas le faire avec du texte pur.</li>
<li>Tant que chaque document a son propre jeu de caract&egrave;res,
et que la reconnaissance des jeux de caract&egrave;res n'est pas
automatique, l'intervention manuelle de l'utilisateur est
in&eacute;vitable. Par exemple, pour voir la page d'accueil de la
distribution Linux XTeamLinux <a href=
"http://www.xteamlinux.com.cn/">http://www.xteamlinux.com.cn/</a>,
je dois dire &agrave; Netscape que la page web est cod&eacute;e en
GB2312.</li>
<li>De nouveaux symboles comme l'Euro sont invent&eacute;s. ISO a
publi&eacute; un nouveau standard ISO-8859-15 qui est en gros
identique &agrave; ISO-8859-1, except&eacute; qu'il supprime des
caract&egrave;res rarement utilis&eacute;s, comme le vieux symbole
mon&eacute;taire, remplac&eacute; par le signe Euro. Si les
utilisateurs acceptent ce standard, ils auront des documents dans
diff&eacute;rents jeux de caract&egrave;res sur leur disque, et
cela deviendra une pr&eacute;occupation quotidienne. Mais les
ordinateurs devraient simplifier le choses, pas les
compliquer.</li>
</ul>
<p>La solution &agrave; ce probl&egrave;me est l'adoption d'un jeu
de caract&egrave;res universel. Ce jeu de caract&egrave;res est
Unicode <a href=
"http://www.unicode.org/">http://www.unicode.org/</a>. Pour plus
d'informations sur Unicode, faites <code>man 7 unicode</code> (page
de man contenue dans le package lpdman-1.20).</p>
<h2><a name="ss1.2">1.2 Les encodages d'Unicode</a></h2>
<p>Cela r&eacute;duit le probl&egrave;me de l'utilisateur (devoir
jongler entre diff&eacute;rents jeux de caract&egrave;res) &agrave;
un probl&egrave;me technique&nbsp;: comment transporter les
caract&egrave;res Unicode en utilisant des octets de 8 bits&nbsp;?
L'unit&eacute; de 8 bits est la plus petite unit&eacute; adressable
de la plupart des ordinateurs et c'est aussi l'unit&eacute;
utilis&eacute;e par les connexions r&eacute;seau TCP/IP. Cependant,
l'utilisation d'un octet pour la repr&eacute;sentation d'un
caract&egrave;re est un accident de l'histoire d&ucirc; au fait que
le d&eacute;veloppement de l'ordinateur commen&ccedil;a en Europe
et aux &Eacute;tats-Unis, o&ugrave; l'on pensait que 96
caract&egrave;res seraient suffisants pour longtemps.</p>
<p>Il y a fondamentalement quatre fa&ccedil;ons d'encoder des
caract&egrave;res Unicode dans des octets&nbsp;:</p>
<dl>
<dt><b>UTF-8</b></dt>
<dd>
<p>128 caract&egrave;res sont encod&eacute;s en utilisant 1
octet&nbsp;: les caract&egrave;res ASCII.<br>
1920 caract&egrave;res sont encod&eacute; en utilisant deux
octets&nbsp;: le latin, le grec, le cyrillique, le copte,
l'arm&eacute;nien, l'h&eacute;breu, les caract&egrave;res
arabes.<br>
63488 caract&egrave;res sont encod&eacute;s en utilisant 3 octets,
le chinois et le japonais entre autres.<br>
Les 2147418112 caract&egrave;res restant (non encore
assign&eacute;s) peuvent &ecirc;tre encod&eacute;s en utilisant 4,
5 ou 6 caract&egrave;res. Pour plus d'informations sur UTF-8,
faites <code>man 7 utf-8</code> (cette page est contenue dans le
package ldpman-1.20).</p>
</dd>
<dt><b>UCS-2</b></dt>
<dd>
<p>Chaque caract&egrave;re est repr&eacute;sent&eacute; par deux
octets. Cet encodage peut repr&eacute;senter seulement les 65536
premiers caract&egrave;res d'Unicode.</p>
</dd>
<dt><b>UTF-16</b></dt>
<dd>
<p>C'est une extension d'UTF-2 qui peut repr&eacute;senter 11144112
caract&egrave;res Unicode. Les 65536 premiers caract&egrave;res
sont repr&eacute;sent&eacute;s par deux octets, les autres par
quatre.</p>
</dd>
<dt><b>UCS-4</b></dt>
<dd>
<p>Chaque caract&egrave;re est repr&eacute;sent&eacute; par 4
octets.</p>
</dd>
</dl>
<p>L'espace n&eacute;cessaire pour encoder un texte,
comparativement aux encodages actuellement en usage (8 bits par
caract&egrave;res pour les langues europ&eacute;ennes, plus pour le
chinois/japonais/cor&eacute;en), est le suivant&nbsp;: (Cela a une
influence sur l'espace disque, et la vitesse des communications
r&eacute;seau.</p>
<dl>
<dt><b>UTF-8</b></dt>
<dd>
<p>Pas de changement pour l'ASCII am&eacute;ricain, juste quelques
pourcents suppl&eacute;mentaires pour ISO-8859-1, 50 % de plus pour
le chinois/japonais/cor&eacute;en, 100 % de plus pour le grec et le
cyrillique.</p>
</dd>
<dt><b>UCS-2 et UTF-16</b></dt>
<dd>
<p>Pas de changement pour le chinois/japonais/cor&eacute;en,
augmentation de 100 % pour l'US ASCII et ISO-8859-1, le grec et le
cyrillique.</p>
</dd>
<dt><b>UCS-4</b></dt>
<dd>
<p>Augmentation de 100% pour le chinois/japonais/cor&eacute;en. De
300% pour l'US ASCII et ISO-8859-1, le grec et le cyrillique.</p>
</dd>
</dl>
<p>&Eacute;tant donn&eacute; la p&eacute;nalit&eacute; pour les
documents am&eacute;ricains et europ&eacute;ens, caus&eacute;e par
UCS-2, UTF-8 et UCS-4, il semble peu probable que ces encodages
aient un potentiel pour une utilisation &agrave; grande
&eacute;chelle. L'API Win32 Microsoft supporte l'encodage UCS-2
depuis 1995 (au moins), cependant cet encodage n'a pas
&eacute;t&eacute; largement adopt&eacute; pour les documents -SJIS
demeure pr&eacute;dominant au Japon.</p>
<p>D'un autre c&ocirc;t&eacute; UTF-8 a le potentiel pour une
utilisation &agrave; large &eacute;chelle, puisqu'il ne
p&eacute;nalise pas les utilisateurs am&eacute;ricains et
europ&eacute;ens, et que beaucoup de logiciels de "traitement de
texte" (NDT&nbsp;: au sens large) n'ont pas besoin d'&ecirc;tre
chang&eacute;s pour supporter UTF-8.<br>
Nous allons maintenant expliquer comment configurer votre
syst&egrave;me Linux pour qu'il utilise UTF-8 comme encodage de
texte.</p>
<h3>Notes pour les d&eacute;veloppeurs C/C++</h3>
<p>L'approche de Microsoft Win32 rend facile pour les
d&eacute;veloppeurs la production de versions Unicode de leurs
programmes&nbsp;: Vous d&eacute;finissez Unicode ("#define
UNICODE") au d&eacute;but de votre programme, et changez alors un
grand nombre d'occurrences de <code>char</code> en
<code>TCHAR</code> jusqu'&agrave; ce que votre programme compile
sans Warnings. Le probl&egrave;mes est que vous avez au final deux
versions de votre programme&nbsp;: une qui comprend le texte UCS-2
mais pas les encodages 8-bit, et une autre qui ne comprend que les
vieux encodages 8-bit.</p>
<p>En plus, il y a une complication qui affecte UCS-2 et
UCS-4&nbsp;: l'ordre de la repr&eacute;sentation interne des nombre
(``the endianness''). Le registre de syst&egrave;mes de codage de
caract&egrave;res de la IANA dit &agrave; l'&eacute;gard de
ISO-10646-UCS-2&nbsp;: "il faut sp&eacute;cifier l'ordre de la
repr&eacute;sentation interne des nombres &agrave;
l'int&eacute;rieur du r&eacute;seau, le standard ne le
sp&eacute;cifie pas". Cette repr&eacute;sentation est "big endian"
en contexte r&eacute;seau, alors que Microsoft recommande dans ses
outils de d&eacute;veloppement C/C++ d'utiliser une
repr&eacute;sention d&eacute;pendante de la machine (c.a.d. "little
endian" sur les processeurs ix86), et d'ajouter une marque de
polarit&eacute; (BOM) au d&eacute;but du document, ou d'utiliser
des heuristiques bas&eacute;es sur la statistique.</p>
<p>D'un autre c&ocirc;t&eacute; l'approche de UTF-8 garde
<code>char*</code> comme type standard pour le stockage des
cha&icirc;nes en C. Il en r&eacute;sulte que votre programme
supportera l'US ASCII, ind&eacute;pendamment de toute variable
d'environnement, et supportera les textes encod&eacute;s en
ISO-8859-1 et UTF-8 &agrave; condition que la variable
d'environnement LANG soit positionn&eacute;e en
cons&eacute;quence.</p>
<h2><a name="ss1.3">1.3 Liens</a></h2>
<p>La liste de ressources de Markus Kuhn (mise &agrave; jour
tr&egrave;s r&eacute;guli&egrave;rement)&nbsp;:</p>
<ul>
<li><a href=
"http://www.cl.cam.ac.uk/~mgk25/unicode.html">http://www.cl.cam.ac.uk/~mgk25/unicode.html</a></li>
<li><a href=
"http://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html">http://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html</a></li>
</ul>
<p>Un survol d'Unicode, UTF-8 et des programmes fonctionnant avec
UTF-8 de Roman Czyborra&nbsp;:<br>
<a href=
"http://czyborra.com/utf/#UTF-8">http://czyborra.com/utf/#UTF-8</a></p>
<p>Des exemples de fichiers UTF-8&nbsp;:</p>
<ul>
<li>Les fichiers <code>quickbrown.txt</code>,
<code>utf-8-test.txt</code>, <code>utf-8-demo.txt</code> dans le
r&eacute;pertoire <code>examples</code> dans le package ucs-fonts
de Markus Kuhn<br>
<a href=
"http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz">http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz</a></li>
<li><a href=
"ftp://ftp.cs.su.oz.au/gary/x-utf8.html">ftp://ftp.cs.su.oz.au/gary/x-utf8.html</a></li>
<li>Le fichier <code>iso10646</code> dans le package trans-1.1.1 de
Kosta Kosti<br>
<a href=
"ftp://ftp.nid.ru/pub/os/unix/misc/trans111.tar.gz">ftp://ftp.nid.ru/pub/os/unix/misc/trans111.tar.gz</a></li>
<li><a href=
"ftp://ftp.dante.de/pub/tex/info/lwc/apc/utf8.html">ftp://ftp.dante.de/pub/tex/info/lwc/apc/utf8.html</a></li>
<li><a href=
"http://www.cogsci.ed.ac.uk/~richard/unicode-sample.html">http://www.cogsci.ed.ac.uk/~richard/unicode-sample.html</a></li>
</ul>
<h2><a name="s2">2. Configuration de l'affichage</a></h2>
<p>Nous supposons que vous avez d&eacute;j&agrave; adapt&eacute;
votre console Linux et la configuration de X11 &agrave; votre
clavier et avez positionn&eacute; correctement la variable de
localisation LANG. Ceci est expliqu&eacute; dans le
Danish/International HOWTO, et dans les autres HOWTOS
nationaux&nbsp;: Finish, French, German, Italian, Polish,
Slovenian, Spanish, Cyrillic, Hebrew, Chinese, Thai, Esperanto.
Mais, s'il vous pla&icirc;t, ne suivez pas le conseil donn&eacute;
dans le Thai-HOWTO vous disant de faire croire que vous utilisez
des caract&egrave;res ISO-8859-1 (U0000..U00FF) alors que vous
tapez des caract&egrave;res Thai (U0E01..U0E5B). Faire cela ne vous
causera que des probl&egrave;mes lorsque vous passerez &agrave;
Unicode.</p>
<h2><a name="ss2.1">2.1 La console Linux</a></h2>
<p>Je ne parle pas tellement de la console ici, parce que je ne
l'utilise que pour rentrer mon login, password, et taper
<code>xinit</code> sur les machines d&eacute;pourvues de xdm.</p>
<p>Mais revenons &agrave; nos moutons&nbsp;: le package kbd-0.99
<a href=
"ftp://sunsite.unc.edu/pub/Linux/system/keyboards/kbd-0.99.tar.gz">ftp://sunsite.unc.edu/pub/Linux/system/keyboards/kbd-0.99.tar.gz</a>,
et une version largement &eacute;tendue, le package
console-tools-0.2.2<br>
<a href=
"ftp://sunsite.unc.edu/pub/Linux/system/keyboards/console-tools-0.2.2.tar.gz">
ftp://sunsite.unc.edu/pub/Linux/system/keyboards/console-tools-0.2.2.tar.gz</a>,
contiennent dans le r&eacute;pertoire kbd-0.99/src/ (ou
console-tools-0.22/screenfonttools/) deux programmes&nbsp;:
&laquo;unicode_start&raquo; et &laquo;unicode_stop&raquo;. Quand
vous appelez &laquo;unicode_start&raquo;, la sortie de la console
est interpr&eacute;t&eacute;e comme de l'UTF-8. De plus, le clavier
est mis en mode Unicode (voir "man kbd_mode"). Dans ce mode, les
caract&egrave;res Unicode tap&eacute;s par Alt-x1...Alt-xn
(o&ugrave; x1...xn sont les chiffres de pav&eacute;
num&eacute;rique) seront &eacute;mis en UTF-8. Si votre clavier, ou
plus pr&eacute;cis&eacute;ment, votre keymap a des touches
correspondant &agrave; des caract&egrave;res non ASCII(comme le
Umlaute allemand), que vous souhaiteriez pouvoir
&laquo;CapsLocker&raquo;, vous devez appliquer au kernel le patch
<a href="linux-2.2.9-keyboard.diff">linux-2.2.9-keyboard.diff</a>
ou <a href=
"linux-2.3.12-keyboard.diff">linux-2.3.12-keyboard.diff</a>.</p>
<p>Vous voudrez probablement afficher des caract&egrave;res de
diff&eacute;rents alphabets sur le m&ecirc;me &eacute;cran. Pour
cela, vous aurez besoin d'une fonte Unicode pour la console.<br>
Le package <a href=
"ftp://sunsite.unc.edu/pub/Linux/system/keyboards/console-data-1999.08.29.tar.gz">
ftp://sunsite.unc.edu/pub/Linux/system/keyboards/console-data-1999.08.29.tar.gz</a>
contient une fonte (LatArCyrHeb-{08,14,16,19}.psf), qui couvre les
lettres pour le latin, le cyrillique, l'h&eacute;breu, et l'arabe.
Il supporte les parties 1, 2, 3, 4, 5, 6, 8, 9, 10 d'ISO-8859
&agrave; lui tout seul. Pour l'installer, copiez le dans
/usr/lib/kbd/consolefonts/, et ex&eacute;cutez<br>
<code>/usr/bin/setfont
/usr/lib/kbd/consolefonts/LatArCyrHeb-14.psf</code>.</p>
<p>Si vous voulez que le copier-coller marche avec les consoles
UTF-8, vous aurez besoin du patch <a href=
"linux-2.3.12-console.diff">linux-2.3.12-console.diff</a> d'Edmund
Thomas, Grimley Evans et Stanislav Voronyi.</p>
<h2><a name="ss2.2">2.2 Fontes &eacute;trang&egrave;res pour
X11</a></h2>
<p>N'h&eacute;sitez pas &agrave; installer des fontes cyrilliques,
chinoises, japonaises, etc. M&ecirc;me si ce ne sont pas des fontes
Unicodes, elles aideront &agrave; afficher des documents
Unicode&nbsp;: au moins Netscape Communicator 4 et Java feront
usage des fontes &eacute;trang&egrave;res si elles sont
disponibles.</p>
<p>Les programmes suivants sont utiles pour installer des
fontes&nbsp;:</p>
<ul>
<li>"mkfontdir r&eacute;pertoire" pr&eacute;pare un
r&eacute;pertoire de fontes utilisables par le serveur X. Il doit
&ecirc;tre ex&eacute;cut&eacute; apr&egrave;s avoir install&eacute;
les fontes dans un r&eacute;pertoire.</li>
<li>"xset fp+ r&eacute;pertoire" ajoute un r&eacute;pertoire au
chemin de fontes actuel du serveur X. Pour que ce soit permanent,
ajoutez une ligne "FontPath" &agrave; votre fichier
/etc/XF86Config, dans la section "Files".</li>
<li>"xset fp rehash" doit &ecirc;tre ex&eacute;cut&eacute;
apr&egrave;s avoir appel&eacute; mkfontdir sur un r&eacute;pertoire
qui est d&eacute;j&agrave; contenu dans le chemin de fontes actuel
du serveur X.</li>
<li>"xfontsel" vous permet de parcourir les fontes
install&eacute;es en filtrant selon les diverses
propri&eacute;t&eacute;s des fontes.</li>
<li>"xlsfonts -fn motif-de-recherche" liste toutes les fontes qui
correspondent &agrave; un motif de recherche. Il affiche aussi
diverses propri&eacute;t&eacute;s des fontes. En particulier,
"xlsfonts -ll -fn fonte" liste les propri&eacute;t&eacute;s de la
fonte CHARSET_REGISTRY et CHARSET_ENCODING, qui ensemble
d&eacute;terminent l'encodage de la fonte.</li>
<li>"xfd -fn fonte" affiche une fonte page par page.</li>
</ul>
<p>Les fontes suivantes sont disponibles gratuitement (liste non
exhaustive)&nbsp;:</p>
<ul>
<li>Celle contenues dans XFree86, quelquefois contenues dans un
package s&eacute;par&eacute;. Par exemple, la SuSE a seulement les
fontes 75 dpi normales dans le package "xf86" de base. Les autres
fontes sont dans les packages "xfnt100", "xfntbig", "xfntcyr",
"xfntscl".</li>
<li>Les fontes internationales pour Emacs,&nbsp; <a href=
"ftp://ftp.gnu.org/pub/gnu/intlfonts/intlfonts-1.1.tar.gz">ftp://ftp.gnu.org/pub/gnu/intlfonts/intlfonts-1.1.tar.gz</a>.
Comme il a &eacute;t&eacute; mentionn&eacute;
pr&eacute;c&eacute;demment, elles sont utiles m&ecirc;me si vous
pr&eacute;f&eacute;rez XEmacs &agrave; GNU Emacs, ou m&ecirc;me si
vous n'utilisez pas Emacs du tout.</li>
</ul>
<h2><a name="ss2.3">2.3 Les fontes Unicode pour X11</a></h2>
<p>Les applications qui souhaitent pouvoir afficher du texte
utilisant diff&eacute;rentes alphabets (comme le cyrillique et le
grec) en m&ecirc;me temps, peuvent le faire en utilisant les
diff&eacute;rentes fontes X pour chaque partie de texte. C'est ce
que font Netscape Communicator et Java. Cependant, cette approche
est plus compliqu&eacute;e, parce que au lieu de travailler avec
"Font" et "XFontStruct", le programmeur devra utiliser "XFonSet",
et aussi parce que toutes les fontes dans le jeu de fontes doivent
avoir les m&ecirc;mes dimensions.</p>
<ul>
<li>Markus Kuhn a assembl&eacute; des fontes &agrave; largeur fixe
(fixed width) de 75 dpi avec Unicode couvrant le latin, le grec, le
cyrillique, l'arm&eacute;nien, le g&eacute;orgien, l'h&eacute;breu,
et les &eacute;critures symboliques. Elles couvrent les parties 1
&agrave; 10 et 13 &agrave; 15 de ISO-8859 en un seul jeu de fontes.
Cette fonte est n&eacute;cessaire pour utiliser un xterm en mode
UTF-8. <a href=
"http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz">http://www.cl.cam.ac.uk/~mgk25/download/ucs-fonts.tar.gz</a></li>
<li>Roman Czyborra a assembl&eacute; une fonte 8x16/16x16 75 dpi
avec l'encodage Unicode couvrant une partie &eacute;norme
d'Unicode. Tel&eacute;chargez unifont.hex.gz et hex2bdf depuis
<a href=
"http://czyborra.com/unifont/">http://czyborra.com/unifont/</a>
Elle n'est pas &agrave; largeur fixe&nbsp;: 8 pixels de large pour
les caract&egrave;res europ&eacute;ens, 16 pour les
caract&egrave;res chinois. Instructions d'installation&nbsp;:
<blockquote>
<pre>
<code>$ gunzip unifont.hex.gz
$ hex2bdf &lt; unifont.hex &gt; unifont.bdf
$ bdftopcf -o unifont.pcf unifont.bdf
$ gzip -9 unifont.pcf
$ cp unifont.pcf.gz /usr/X11R6/lib/X11/fonts/misc
$ cd usr/X11R6/lib/X11/fonts/misc
$ mkfontdir
$ xset fp rehash
</code>
</pre></blockquote>
</li>
<li>Primoz Peterlin a assembl&eacute; un famille de fontes ETL
couvrant le latin, le grec, le cyrillique, l'arm&eacute;nien, le
g&eacute;orgien, et l'h&eacute;breu. <a href=
"ftp://ftp.x.org/contrib/fonts/etl-unicode.tar.gz">ftp://ftp.x.org/contrib/fonts/etl-unicode.tar.gz</a>.
Utilisez le programme "bdftopcf" pour l'installer.</li>
</ul>
<h2><a name="ss2.4">2.4 Unicode xterm</a></h2>
<p>xterm fait partie de X11R6 et XFree86, mais il est maintenu
s&eacute;par&eacute;ment par Tom Dickey.<br>
<a href=
"http://www.clark.net/pub/dickey/xterm/xterm.html">http://www.clark.net/pub/dickey/xterm/xterm.html</a>.
Les nouvelles versions (patch niveau 109 et plus) supportent la
conversion des touches (keystrokes) en UTF-8 avant de les envoyer
&agrave; l'application qui tourne dans le xterm, et l'affichage des
caract&egrave;res Unicode que l'application renvoie comme une
s&eacute;quence d'octets UTF-8.</p>
<p>Pour obtenir un xterm UTF-8 fonctionnel, vous devez&nbsp;:</p>
<ul>
<li>Rapatrier <a href=
"http://www.clark.net/pub/dickey/xterm/xterm.tar.gz">http://www.clark.net/pub/dickey/xterm/xterm.tar.gz</a>.</li>
<li>Le configurer en ex&eacute;cutant "./configure
-enable-wide-chars...", puis le compiler et l'installer.</li>
<li>Avoir une fonte Unicode &agrave; largeur fixe install&eacute;e.
ucs-fonts.tar.gz de Markus Kuhn (voir ci-dessus) est fait pour
&ccedil;a.</li>
<li>Lancer "xterm -u8 -fn fixed". L'option "-u8" enclenche le
support d'Unicode et d'UTF-8. La fonte "fixed" est celle de Markus
Khun.</li>
<li>Jeter un oeil aux fichiers-exemples contenus dans le package
ucs-fonts de Markus Khun&nbsp;:&nbsp;
<blockquote>
<pre>
<code>$ cd .../ucs-fonts
$ cat quickbrown.txt
$ cat utf-8-demo.txt
</code>
</pre></blockquote>
Vous devriez voir (entre autre) des caract&egrave;res grecs et
cyrilliques.</li>
<li>Pour configurer xterm pour qu'il utilise le support UTF-8
d&egrave;s le lancement, ajoutez la ligne "XTerm*utf8:1" &agrave;
votre $HOME/.Xdefaults (pour vous seul). Je ne recommande pas de
changer directement /usr/X11R6/lib/X11/app-defauts/XTerm, parce que
vos changements seront effac&eacute;s lorsque vous installerez une
nouvelle version de XFree86.</li>
<li>Si vous avez aussi chang&eacute; le nom de la fonte, vous aurez
besoin d'une ligne "*VT100*font: votre-fonte" dans votre fichier
$HOME/.Xdefaults. Pour les fontes "fixes" ce n'est pas
n&eacute;cessaire, puisque "fixed" est la valeur par d&eacute;faut
de toute fa&ccedil;on.</li>
</ul>
<h2><a name="ss2.5">2.5 Divers</a></h2>
<p>Un petit programme qui teste si une console Linux est en mode
UTF-8 peut &ecirc;tre trouv&eacute; dans le package <a href=
"ftp://sunsite.unc.edu/pub/Linux/system/keyboards/x-lt-1.18.tar.gz">
ftp://sunsite.unc.edu/pub/Linux/system/keyboards/x-lt-1.18.tar.gz</a>
de Ricardas Cepas. Ce sont les fichiers testUTF-8.c et
testUTF8.c.</p>
<h2><a name="s3">3. Configuration des locales</a></h2>
<h2><a name="ss3.1">3.1 Les fichiers et le kernel</a></h2>
<p>Vous pouvez maintenant utiliser n'importe quel caract&egrave;re
Unicode dans les noms de fichiers. Ni le kernel ni aucun utilitaire
syst&egrave;me ne n&eacute;cessite de modifications. Ceci parce que
les noms de fichiers dans le kernel peuvent &ecirc;tre n'importe
quoi qui ne contient ni octet nul, ni '/' (utilis&eacute; pour
d&eacute;limiter les sous-r&eacute;pertoires). Quand ils sont
encod&eacute;s en utilisant UTF-8, les caract&egrave;res non-ASCII
ne seront jamais encod&eacute;s en utilisant un octet nul ou un
slash. La seule cons&eacute;quence est que les noms de fichiers et
de r&eacute;pertoires occupent plus d'octets qu'ils ne contiennent
de caract&egrave;res. Par exemple, un nom de fichier contenant cinq
caract&egrave;res grecs appara&icirc;tra pour le kernel comme un
nom de fichier de 10 octets. Le kernel ne sait pas (et n'a pas
besoin de savoir) que ces octets sont affich&eacute;s en grec.</p>
<p>C'est une th&eacute;orie g&eacute;n&eacute;rale, qui est vraie
tant que vos fichiers restent sur un syst&egrave;me Linux. Sur les
syst&egrave;mes de fichiers utilis&eacute;s depuis d'autres
syst&egrave;mes d'exploitation, <code>mount</code> poss&egrave;de
des options pour contr&ocirc;ler la conversion des noms de fichiers
de/vers UTF-8&nbsp;:</p>
<ul>
<li>Les syst&egrave;mes de fichiers "vfat" ont une option
"utf8".<br>
Voir le fichier <a href=
"file:/usr/src/linux/Documentation/filesystems/vfat.txt">file:/usr/src/linux/Documentation/filesystems/vfat.txt</a>.
Quand vous donnez &agrave; mount une option "iocharset"
diff&eacute;rente de celle utilis&eacute;e par d&eacute;faut (qui
est "iso8859-1"), les r&eacute;sultats avec et sans l'option "utf8"
ne sont pas coh&eacute;rents. Par cons&eacute;quent, je ne
conseille pas d'utiliser l'option "iocharset" de mount.</li>
<li>Les syst&egrave;mes de fichiers "msdos", "umsdos" ont la
m&ecirc;me option de montage, mais il semble qu'elle n'ait pas
d'effet.</li>
<li>Le syst&egrave;me de fichiers "iso9660" a une option de montage
"utf8".<br>
Voir <a href=
"file:/usr/src/linux/Documentation/filesystems/isofs.txt">file:/usr/src/linux/Documentation/filesystems/isofs.txt</a></li>
<li>&Agrave; partir des kernels Linux 2.2.x, le syst&egrave;me de
fichier "ntfs" a une option de montage"utf8".<br>
Voir <a href=
"file:/usr/src/linux/Documentation/filesystems/ntfs.txt">file:/usr/src/linux/Documentation/filesystems/ntfs.txt</a></li>
</ul>
<p>Les autres syst&egrave;mes de fichiers (nfs, smbfs, ncpfs, hpfs,
etc.) ne convertissent pas les noms de fichiers. Par
cons&eacute;quent ils accepteront les noms de fichier Unicode
encod&eacute;s en UTF-8 seulement si l'autre syst&egrave;me
d'exploitation les supporte. Rappelez vous que pour qu'une option
de montage soit appliqu&eacute;e aux prochains montages, vous devez
l'ajouter &agrave; la quatri&egrave;me colonne de la ligne
correspondante dans /etc/fstab.</p>
<h2><a name="ss3.2">3.2 Le kernel et les ttys</a></h2>
<p>Les ttys sont en quelque sorte des tubes bidirectionnels entre
deux programmes, autorisant des choses comme la
r&eacute;p&eacute;tition (echoing) ou l'&eacute;dition de la ligne
de commande. Quand dans un xterm, vous ex&eacute;cutez la commande
"cat" sans arguments, vous pouvez entrer et &eacute;diter autant de
lignes que vous voulez, elles seront r&eacute;p&eacute;t&eacute;es
en retour ligne par ligne. Les actions d'&eacute;dition du kernel
ne sont pas correctes, en particulier les touche Backspace et Tab
ne seront pas trait&eacute;es correctement.</p>
<p>Pour r&eacute;soudre ce probl&egrave;me, vous devez&nbsp;:</p>
<ul>
<li>Appliquer le patch <a href=
"linux-2.0.35-tty.diff">linux-2.0.35-tty.diff</a> ou <a href=
"linux-2.2.9-tty.diff">linux-2.2.9-tty.diff</a> ou <a href=
"linux-2.3.12-tty.diff">linux-2.3.12-tty.diff</a> et recompiler
votre kernel.</li>
<li>Si vous utilisez la glibc2, appliquer le patch <a href=
"glibc211-tty.diff">glibc211-tty.diff</a> et recompiler votre libc.
Si vous n'&ecirc;tes pas aussi aventureux, il suffit de patcher une
version d&eacute;j&agrave; install&eacute;e avec le fichier
inclus&nbsp;: <a href="glibc-tty.diff">glibc-tty.diff</a></li>
<li>Appliquer le patch <a href="stty.diff">stty.diff</a> &agrave;
GNU sh-utils-1.16b, et recompiler le programme <code>stty</code>.
Testez le ensuite en utilisant <code>stty -a</code> et <code>stty
iutf8</code>.</li>
<li>Ajouter la commande <code>stty iutf8</code> au script
unicode_start, et la commande <code>stty -iutf8</code> au script
unicode_stop.</li>
<li>Appliquer le patch <a href="xterm.diff">xterm.diff</a> &agrave;
xterm-109, et recompiler "xterm", puis le tester en lan&ccedil;ant
<code>xterm -u8</code> / <code>xterm +u8</code> et en
lan&ccedil;ant <code>stty -a</code> et un <code>cat</code>
interactif &agrave; l'int&eacute;rieur.</li>
</ul>
<p>Pour que ce changement soit persistant m&ecirc;me &agrave;
travers rlogin et telnet, vous devrez aussi&nbsp;:</p>
<ul>
<li>D&eacute;finir des nouvelles valeurs pour la variable
d'environnement TERM, "linux-utf8" comme alias pour "linux", et
"xterm-utf8" comme alias pour "xterm". Si vous avez la
biblioth&egrave;que ncurses sur votre syst&egrave;me et la base de
donn&eacute;es /usr/lib/terminfo (ou /usr/share/terminfo), faites
cela en &eacute;xecutant
<blockquote>
<pre>
<code>$ tic linux-utf8 . terminfo
$ tic xterm-utfu . terminfo
</code>
</pre></blockquote>
sur un compte utilisateur (cela cr&eacute;era les entr&eacute;es
terminfo dans votre repertoir $HOME/.terminfo). Voil&agrave;
<a href="linux-utf8.terminfo">linux-utf8.terminfo</a> et <a href=
"xterm-utf8.terminfo">xterm-utf8.terminfo</a>.<br>
Je ne recommande pas de lancer ces commandes en tant que root,
parce que cela cr&eacute;era les entr&eacute;es terminfo dans
/urs/lib/terminfo, o&ugrave;, elles seront probablement
effac&eacute;es lors de la prochaine mise &agrave; jour de votre
syst&egrave;me. Si votre syst&egrave;me poss&egrave;de un fichier
/etc/termcap, vous devriez aussi &eacute;diter ce fichier&nbsp;:
copiez les entr&eacute;es linux et xterm, et donnez leur les
nouveaux noms "linux-utf8" et "xterm-utf8". Le fichier&nbsp;
<a href="termcap.diff">termcap.diff</a> contient un exemple.</li>
<li>&Agrave; chaque fois que vous appelez "unicode_start" et
"unicode_stop" depuis la console, ex&eacute;cutez aussi "export
TERM =linux-utf8", ou "export TERM=linux", respectivement.</li>
<li>Appliquer le patch <a href="xterm2.diff">xterm2.diff</a>
&agrave; xterm-0.9, recompiler "xterm", et et enlever toutes les
lignes "XTerm*termName" des fichiers
/usr/X11R6/lib/X11/app-defaults/XTerm et $HOME/.Xdefaults.
Maintenant xterm donne &agrave; TERM la valeur "xterm-utf8"
plut&ocirc;t que "xterm".</li>
<li>Appliquer les patches <a href="netkit.diff">netkit.diff</a>,
<a href="netkitb.diff">netkitb.diff</a>et <a href=
"telnet.diff">telnet.diff</a> puis recompiler "rlogind" et
"telnetd". Maintenant rlogin et telnet mettent tty en mode
d'&eacute;dition UTF-8 &agrave; chaque fois que la variable
d'environnement TERM est "linux-ut8" ou "xterm-utf8".</li>
</ul>
<h2><a name="ss3.3">3.3 Conversion de donn&eacute;es
g&eacute;n&eacute;rales</a></h2>
<p>Vous aurez besoin d'un programme pour convertir vos fichiers
texte locaux (probablement ISO-8859-1) en UTF-8. L'alternative
serait de continuer &agrave; utiliser des textes qui utilisent
diff&eacute;rents encodages sur la m&ecirc;me machine, mais ce
n'est pas une bonne solution sur le long terme. Un de ces
programmes est "iconv", qui est livr&eacute; avec la glibc-2.1.
Tapez simplement</p>
<blockquote>
<pre>
<code>icon --from-code=ISO-8859-1 --to-code=UTF-8 &lt; vieux_fichier &gt; nouveau_fichier
</code>
</pre></blockquote>
<p>Voici deux scripts shell tr&egrave;s pratiques,
appel&eacute;s&nbsp; "i2u" <a href="i2u.sh">i2u.sh</a> (pour
conversion de ISO &agrave; UTF) et&nbsp; "u2i" <a href=
"u2i.sh">u2i.sh</a> (pour conversion de UTF &agrave; ISO). [skip
adapt..]</p>
<p>Si vous n'avez pas la glibc-2.1 et iconv install&eacute;s, vous
pouvez utiliser GNU recode 3.5 &agrave; la place. "i2u" <a href=
"i2u_recode.sh">i2u_recode.sh</a> est "recode ISO-8859-1..UTF-8"
"u2i" <a href="u2i_recode.sh">u2i_recode.sh</a> est "recode
UTF-8..ISO-8859-1".<br>
<a href=
"ftp://ftp.iro.umontreal.ca/pub/recode/recode-3.5.tar.gz">ftp://ftp.iro.umontreal.ca/pub/recode/recode-3.5.tar.gz</a><br>

<a href=
"ftp://ftp.gnu.org/pub/gnu/recode/recode-3.5.tar.gz">ftp://ftp.gnu.org/pub/gnu/recode/recode-3.5.tar.gz</a><br>

Notes&nbsp;: vous devez utiliser GNU recode 3.5 ou plus. Pour
compiler GNU recode sur des plateformes sans glibc-2 (c'est
&agrave; dire sur toutes les plateformes sauf les syst&egrave;mes
Linux r&eacute;cents), vous devez le configurer avec
"--disable-nls", autrement l'&eacute;dition des liens
&eacute;chouera.</p>
<p>Sinon, vous pouvez aussi utiliser CLISP &agrave; la place. Voici
"i2u" et "u2i" en version lisp&nbsp;: <a href="i2u.lsp">i2u.lsp</a>
et <a href="u2i.lsp">u2i.lsp</a>.<br>
Note&nbsp;: Vous devez avoir une version de CLISP qui date au plus
de juillet 1999.<br>
<a href=
"ftp://clisp.cons.org/pub/lisp/clisp/source/clispsrc.tar.gz">ftp://clisp.cons.org/pub/lisp/clisp/source/clispsrc.tar.gz</a><br>

D'autres programmes de conversion de donn&eacute;es existent, mais
ils sont moins puissants que GNU recode. Ce sont</p>
<ul>
<li>"trans"<br>
<a href=
"ftp://ftp.informatik.uni-erlangen.de/pub/doc/ISO/charsets/trans113.tar.gz">
ftp://ftp.informatik.uni-erlangen.de/pub/doc/ISO/charsets/trans113.tar.gz</a></li>
<li>"tcs" qui vient du syst&egrave;me d'exploitation
Plan9&nbsp;:<br>
<a href=
"ftp://ftp.informatik.uni-erlangen.de/pub/doc/ISO/charsets/tcs.tar.gz">
ftp://ftp.informatik.uni-erlangen.de/pub/doc/ISO/charsets/tcs.tar.gz</a></li>
<li>et "utrans/uhtrans/hutrans" par G.Adam Stanislav&nbsp; <a href=
"mailto:adam@whizkidtech.net">&lt;adam@whizkidtech.net&gt;</a><br>
<a href=
"ftp://ftp.cdrom.com/pub/FreeBSD/distfiles/i18ntools-1.0.tar.gz">ftp://ftp.cdrom.com/pub/FreeBSD/distfiles/i18ntools-1.0.tar.gz</a></li>
</ul>
<h2><a name="ss3.4">3.4 Les variables d'environnement
locales</a></h2>
<p>Vous pouvez avoir les variables d'environnement suivantes
positionn&eacute;es, contenant les noms de locales&nbsp;:</p>
<dl>
<dt><b>LANGUAGE</b></dt>
<dd>
<p>Remplacement pour LC_MESSAGES. Seulement utilis&eacute; par GNU
gettext.</p>
</dd>
<dt><b>LC_ALL</b></dt>
<dd>
<p>Remplacement pour toute les autres variables
LC_*&nbsp;:&nbsp;</p>
</dd>
<dt><b>LC_CTYPE, LC_MESSAGES, LC_COLLATE, LC_NUMERIC, LC_MONETARY,
LC_TIME</b></dt>
<dd>
<p>Ce sont des variables individuelles pour&nbsp;: le type des
caract&egrave;res et leur encodage, les messages en langue
maternelle, les r&egrave;gles de classement, le format des nombres,
le format des montants mon&eacute;taires, l'affichage de la date et
de l'heure.</p>
</dd>
<dt><b>LANG</b></dt>
<dd>
<p>Valeur par d&eacute;faut pour toutes les variables LC_*</p>
</dd>
</dl>
(Voir `<code>man 7 locale</code>' pour une description
d&eacute;taill&eacute;e.)
<p>Chacune des variables LC_* et LANG peuvent contenir un nom de
locale de la forme suivante&nbsp;:</p>
<blockquote>language[_territory[.codeset]][@modifier]</blockquote>
<p>O&ugrave; <em>language</em> est un code de langue <a href=
"ISO_639">ISO 639</a> (en minuscules), <em>territory</em> est un
code de pays <a href="ISO_3166">ISO 3166</a> (en majuscules),
<em>codeset</em> d&eacute;signe une table de caract&egrave;res, et
<em>modifier</em> d'autres attributs particuliers (par pour exemple
indiquer un dialecte particulier d'une langue, ou une orthographe
non standard).</p>
<p>LANGUAGE peut contenir plusieurs noms de locale,
s&eacute;par&eacute;s par deux points (:).</p>
<p>Pour dire &agrave; votre syst&egrave;me et &agrave; toutes les
applications que vous utilisez UTF-8, vous devez ajouter un suffixe
d'UTF-8 &agrave; vos noms de locales. Par exemple, si vous
utilisiez</p>
<blockquote>
<pre>
<code>LANGUAGE=de:fr:en
LC_CTYPE=de_DE
</code>
</pre></blockquote>
<p>vous le changeriez en</p>
<blockquote>
<pre>
<code>LANGUAGE=de.UTF-8:fr.UTF-8:en.UTF-8
LC_CTYPE=de_DE.UTF-8
</code>
</pre></blockquote>
<h2><a name="ss3.5">3.5 Cr&eacute;er les fichiers pour le support
des locales</a></h2>
<p>Si vous avez la glibc-2.1 ou glibc-2.1.1 ou glibc-2.1.2
install&eacute;e, v&eacute;rifiez d'abord en utilisant "localedef
-help" que le r&eacute;pertoire syst&egrave;me pour le tables de
caract&egrave;res est /usr/share/i18n/charmaps. Puis appliquez au
fichier /usr/share/i18n/charmaps/UTF8 le patch <a href=
"glibc21.diff">glibc21.diff</a> ou <a href=
"glibc211.diff">glibc211.diff</a> ou <a href=
"glibc212.diff">glibc212.diff</a>, respectivement. Puis
cr&eacute;ez les fichiers de support pour toute les locales UTF-8
que vous voulez utiliser, par exemple&nbsp;:</p>
<blockquote>
<pre>
<code>$ localedef -v -c -i de_DE -f UTF8 /usr/share/locale/de_DE.UTF-8
</code>
</pre></blockquote>
<p>G&eacute;n&eacute;ralement vous n'avez pas besoin de
cr&eacute;er des variables appel&eacute;es "de" ou "fr" sans
suffixe pour le code du pays, parce que ces locales sont
normalement utilis&eacute;es seulement par la variable LANGUAGE, et
pas par les variables LC_*. De plus LANGUAGE est seulement
utilis&eacute; en remplacement de LC_MESSAGES.</p>
<h2><a name="ss3.6">3.6 Ajouter le support pour la
biblioth&egrave;que C</a></h2>
<p>La glibc-2.2 supportera les locales multi-octets (de plusieurs
octets), en particulier les locales UTF-8 cr&eacute;&eacute;es plus
haut. Mais les glibc-2.1 et 2.1.1 ne la supportent pas
r&eacute;ellement. Par cons&eacute;quent le seul effet r&eacute;el
de la cr&eacute;ation des fichiers /usr/local/share/de_DE.UTF-8/*
ci dessus est que <code>setlocale(LC_ALL,"")</code> retournera
"de_DE.UTF-8", conform&eacute;ment &agrave; vos variables
d'environnement, au lieu d'enlever le suffixe "UTF-8".</p>
<p>Pour ajouter le support pour la locale UTF-8, vous devriez
compiler et installer la biblioth&egrave;que 'libutf8_plug.so',
depuis <a href="libutf8-0.5.2.tar.gz">libutf8-0.5.2.tar.gz</a>.
Puis vous pouvez positionner la variable d'environnement LD_PRELOAD
pour qu'elle pointe sur la biblioth&egrave;que
install&eacute;e&nbsp;:</p>
<blockquote>
<pre>
<code>export LD_PRELOAD=/usr/local/lib/libutf8_plug.so
</code>
</pre></blockquote>
Alors, dans chaque programme lanc&eacute; avec cette variable
d'environnement positionn&eacute;e, les fonctions de
libutf8_plug.so seront appel&eacute;es &agrave; la place des
originales dans /lib/libc.so.6. Pour plus d'informations sur
LS_PRELOAD, voyez "man 8 ld.so".
<p>Tout cela ne sera plus n&eacute;cessaire quand la glibc-2.2
sortira.</p>
<h2><a name="ss3.7">3.7 Conversion des catalogues de
messages</a></h2>
<p>Maintenant ajoutons un contenu &agrave; ces nouvelles locales.
Les commandes /bin/sh suivantes convertiront vos catalogues de
messages au format UTF-8. Elles doivent &ecirc;tre lanc&eacute;es
en tant que root, et n&eacute;cessitent les programmes 'msgfmt' et
'msgunfmt' de GNU gettext-0.10.35 <a href=
"convert-msgcat.sh">convert-msgcat.sh</a>.<br>
Ceci non plus ne sera plus n&eacute;cessaire une fois que la
glibc-2.2 sera sortie, parce qu'alors la fonction gettext
convertira les cha&icirc;nes de caract&egrave;res de fa&ccedil;on
appropri&eacute;e depuis la table de caract&egrave;res du
traducteur vers la table de caract&egrave;res de l'utilisateur, en
utilisant soit iconv soit librecode.</p>
<h2><a name="s4">4. Applications sp&eacute;cifiques.</a></h2>
<h2><a name="ss4.1">4.1 Le r&eacute;seau</a></h2>
<h3>rlogin</h3>
<p>Marche bien avec les patches mentionn&eacute;s
pr&eacute;c&eacute;demment.</p>
<h3>telnet</h3>
<p>Telnet n'est pas ne traite pas les caract&egrave;res 8-bits (il
n'est pas"8-bit-clean") par d&eacute;faut. Pour pouvoir envoyer des
codes de touches Unicode &agrave; un h&ocirc;te distant, vous devez
mettre telnet en mode "outbinary". Il y a deux fa&ccedil;ons de
faire cela&nbsp;:&nbsp;</p>
<blockquote>
<pre>
<code>$ telnet -L &lt;hote&gt;
</code>
</pre></blockquote>
<p>et</p>
<blockquote>
<pre>
<code>$telnet
telnet&gt; set outbinary
telnet&gt; open &lt;hote&gt;
</code>
</pre></blockquote>
<p>en outre, utilisez les patches mentionn&eacute;s
pr&eacute;c&eacute;demment.</p>
<h2><a name="ss4.2">4.2 Les navigateurs</a></h2>
<h3>Netscape</h3>
<p>Netscape 4.05 ou plus peut afficher des documents HTML en
encodage UTF-8. Tout ce qu'un document n&eacute;cessite est la
ligne suivante, situ&eacute;e entre les tags &lt;head&gt; et
&lt;/head&gt;</p>
<blockquote>
<pre>
<code>&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
</code>
</pre></blockquote>
Netscape 4.05 ou plus peut aussi afficher du HTML et du texte en
encodage UCS-2 avec le [byte-order mark]. <a href=
"http://www.netscape.com/computing/download/">http://www.netscape.com/computing/download/</a>
<h3>Lynx</h3>
<p>Lynx 2.8 a un &eacute;cran d'options (touche 'O') qui permet de
s&eacute;lectionner la table de caract&egrave;res utilis&eacute;e
&agrave; l'affichage. Quand il, tourne dans un xterm ou depuis une
"Linux console" en mode UTF-8, s&eacute;lectionnez "UNICODE
UTF-8".</p>
<p>Maintenant, encore une fois, tout ce qu'un document
n&eacute;cessite est la ligne suivante, entre les tags &lt;head&gt;
et &lt;/head&gt;&nbsp;:</p>
<blockquote>
<pre>
<code>&lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
</code>
</pre></blockquote>
<p>Quand vous visualisez des fichiers texte encod&eacute;s en
UTF-8, vous devez aussi passer &agrave; la ligne de commande
l'option&nbsp; "-assume_local_charset=UTF-8" (affecte seulement les
URLs de type file:/...) ou "-assume_charset=UTF-8" (affecte toute
les URLs). Sinon, dans Lynx-2.2.8, vous pouvez, dans l'&eacute;cran
d'options, changer le jeu de caract&egrave;res suppos&eacute; par
d&eacute;faut ("assumed document character set") en "utf-8".</p>
<p>Il y a aussi, dans l'&eacute;cran d'options, une option
permettant de choisir le jeu de caract&egrave;res par d&eacute;faut
("preferred document character set"), mais cela n'a pas d'effet, au
moins avec les URLs file:/... et http://... servies par
apache-1.3.0.</p>
<p>Cependant, il y a un probl&egrave;me concernant les espaces et
les fins de lignes : regardez &agrave; la section russe de
x-utf-8.html, ou utf-8-demo.txt.</p>
<p>Notez aussi que dans Lynx-2.8.2, configur&eacute; avec l'option
-enable-prettysrc, les jolies combinaisons de couleurs ne marchent
plus correctement quand le jeu de caract&egrave;res pour
l'affichage &agrave; &eacute;t&eacute; positionn&eacute; &agrave;
"UNICODE-UTF-8". Ce probl&egrave;me est r&eacute;solu par le patch
<a href="lynx282.diff">lynx282.diff</a>.</p>
<p>D'apr&egrave;s les d&eacute;veloppeurs de lynx&nbsp;: "Pour une
utilisation s&eacute;rieuse de l'affichage UTF-8 avec Lynx, il est
toujours recommand&eacute; de compiler avec la biblioth&egrave;que
slang et -DSLANG_MBCS_HACK."<br>
<a href=
"ftp://ftp.gnu.org/pub/gnu/lynx/lynx-2.8.2.tar.gz">ftp://ftp.gnu.org/pub/gnu/lynx/lynx-2.8.2.tar.gz</a><br>

<a href="http://lynx.browser.org/">http://lynx.browser.org/</a><br>
<a href=
"http://www.slcc.edu/lynx/">http://www.slcc.edu/lynx/</a><br>
<a href="ftp://lynx.isc.org/">ftp://lynx.isc.org/</a></p>
<h3>Pages de test</h3>
<p>Des pages de test pour les navigateurs peuvent &ecirc;tre
trouv&eacute;es sur les pages d'Alan Wood et James Kass &nbsp;:<br>
<a href=
"http://www.hclrss.demon.co.uk/unicode/#links">http://www.hclrss.demon.co.uk/unicode/#links</a>,
<a href=
"http://home.att.net/~jameskass/">http://home.att.net/~jameskass/</a></p>
<h2><a name="ss4.3">4.3 Les &eacute;diteurs</a></h2>
<h3>yudit</h3>
<p>Le programme <code>yudit</code> de G&aacute;sp&aacute;r Sinai
<a href="http://czyborra.com/yudit/">http://czyborra.com/yudit/</a>
est un &eacute;diteur de texte unicode de premier ordre pour le
syst&egrave;me X Window. Il supporte le traitement simultan&eacute;
de beaucoup de langages, m&eacute;thodes d'entr&eacute;e,
conversions de caract&egrave;res locaux standards. Il est
&eacute;quip&eacute; pour supporter l'entr&eacute;e de texte dans
tous les langages avec seulement un clavier anglais, en utilisant
des tables de configuration du clavier.</p>
<p>Il peut &ecirc;tre compil&eacute; en 3 versions&nbsp;: interface
graphique Xlib , KDE, ou Motif.</p>
<p>Il peut &ecirc;tre personnalis&eacute; tr&egrave;s facilement.
Typiquement, vous voudrez modifier votre fonte. Depuis le menu font
je choisis "Unicode". Puis, puisque la commande "xlsfonts
'*_*-iso10646-1" donnait toujours un affichage ambigu, je choisis
un taille de fonte de 13 (pour correspondre &agrave; la fonte fixe
de 13 pixels de Markhus Kuhn).</p>
<p>Ensuite, vous personnaliserez votre m&eacute;thode
d'entr&eacute;e. Les m&eacute;thodes "Straight", "Unicode" et
"SGML" sont les plus int&eacute;ressantes. Pour avoir des
d&eacute;tails sur les autres m&eacute;thodes d'entr&eacute;es
incorpor&eacute;es, regardez dans
"/usr/local/share/yudit/data/".</p>
<p>Pour qu'un changement devienne un r&eacute;glage par
d&eacute;faut pour les prochaines sessions, &eacute;ditez votre
fichier $HOME/.yuditrc.</p>
<p>Les fonctionnalit&eacute;s g&eacute;n&eacute;rales de
l'&eacute;diteur sont limit&eacute;es &agrave; l'&eacute;dition, le
copier-coller, et le "chercher-remplacer" (search&amp;replace). Pas
de fonction d'annulation (undo).</p>
<h3>mined98</h3>
<p><code>mined98</code> est un petit &eacute;diteur de texte de
Michiel Huisjes, Achim M&uuml;ller et Thomas Wolff : <a href=
"http://www.inf.fu-berlin.de/~wolff/mined.html">http://www.inf.fu-berlin.de/~wolff/mined.html</a>.
Il vous permet d'&eacute;diter des fichier encod&eacute;s en UTF-8
ou 8 bits, dans un xterm UTF-8 ou 8-bits. Il dispose aussi de
puissantes fonctionnalit&eacute;s pour entrer les caract&egrave;res
Unicode.</p>
<p>Quand mined est lanc&eacute; dans un xterm ou une console Linux
en mode UTF-8, vous devriez positionner la variable d'environnement
<code>utf8_term</code>, ou appeler mined avec l'option
<code>-U</code>.</p>
<p>mined vous permet d'&eacute;diter des fichiers encod&eacute;s
aussi bien en UTF-8 qu'en 8-bits. Par d&eacute;faut il utilise un
heuristique d'auto-d&eacute;tection. Si vous ne voulez pas vous
reposer sur des heuristiques, passez l'option <code>-u</code>
&agrave; la ligne de commande lorsque vous &eacute;ditez un fichier
UTF-8, ou <code>+u</code> lorsque vous &eacute;ditez un fichier
encod&eacute; en 8 bits. Vous pouvez changer
l'interpr&eacute;tation &agrave; n'importe quel moment depuis
l'&eacute;diteur&nbsp;: il affiche l'encodage ("L:h" pour du
8-bits, "U:h" pour de l'UTF-8) dans la ligne de menu. Vous pouvez
cliquer sur le premier de ces caract&egrave;res pour le
changer.</p>
<p>Quelques b&eacute;mols&nbsp;:</p>
<ul>
<li>Le binaire Linux dans la distribution est d&eacute;pass&eacute;
et ne supporte pas UTF-8. Vous devrez recompiler un binaire
&agrave; partir des sources. Installez ensuite src/mined dans
/usr/local/bin/mined et doc/mined.help dans
/usr/local/man/cat1/mined.1, de fa&ccedil;on &agrave; ce que
<code>ESC h</code> le trouve.</li>
<li>mined ignore votre r&eacute;glage "stty erase". Quand votre
touche backspace renvoie un code ASCII 127, et que vous avez
positionn&eacute; "stty erase ^?" - ce qui est finalement le
r&eacute;glage le plus s&ucirc;r - vous devez appeler mined avec
l'option <code>-B</code> de fa&ccedil;on &agrave; ce que la touche
backspace efface le caract&egrave;re &agrave; gauche du
curseur.</li>
<li>Les touches "Home", "End", "Delete" ne marchent pas.</li>
</ul>
<h3>vim</h3>
<p><code>vim</code> (depuis la version 5.4m) supporte les locales
multi-octets, mais seulement si la biblioth&egrave;que X a le
m&ecirc;me support, et seulement pour les encodages avec au moins
deux octets par caract&egrave;res, i.e les encodages ISO-2022. Il
ne supporte pas l'UTF-8.</p>
<h3>emacs</h3>
<p>Avant tout, vous devriez lire la section "International
Character Set Support" (noeud "International") dans le manuel
d'Emacs. En particulier, notez que vous devez d&eacute;marrer Emacs
avec la commande</p>
<blockquote>
<pre>
<code>$ emacs -fn fontset-standard
</code>
</pre></blockquote>
pour qu'il utilise un jeu de fontes comprenant beaucoup de
caract&egrave;res internationaux.
<p>&Agrave; court terme, le package emacs-utf <a href=
"http://www.cs.ust.hk/faculty/otfried/Mule/">http://www.cs.ust.hk/faculty/otfried/Mule/</a>
d'Otfried Cheong procure un "unicode-utf-8" pour Emacs.
Apr&egrave;s avoir compil&eacute; le programme "utf2mule" et
l'avoir install&eacute; quelque part dans votre $PATH, installez
aussi unicode.el, muleuni-1.el, unicode_char.el quelque part, et
ajoutez les lignes</p>
<blockquote>
<pre>
<code>     (setq load-path (cons "/home/user/somewhere/emacs" load-path))
     (if (not (string-match "XEmacs" emacs-version))
       (progn
         (require 'unicode)
         (if (eq window-system 'x)
           (progn
             (create-fontset-from-fontset-spec
               "-misc-fixed-medium-r-normal-*-12-*-*-*-*-*-fontset-standard")
             (create-fontset-from-fontset-spec
               "-misc-fixed-medium-r-normal-*-13-*-*-*-*-*-fontset-standard")
             (create-fontset-from-fontset-spec
               "-misc-fixed-medium-r-normal-*-14-*-*-*-*-*-fontset-standard")
             (create-fontset-from-fontset-spec
               "-misc-fixed-medium-r-normal-*-15-*-*-*-*-*-fontset-standard")
             (create-fontset-from-fontset-spec
               "-misc-fixed-medium-r-normal-*-16-*-*-*-*-*-fontset-standard")
             (create-fontset-from-fontset-spec
               "-misc-fixed-medium-r-normal-*-18-*-*-*-*-*-fontset-standard")))))
</code>
</pre></blockquote>
<p>&agrave; votre $HOME/.emacs. Pour activer un des jeux de fontes,
utilisez l'item "Set Font/FonSet" du menu mule, ou
Shift-down-mouse-1. Pour l'instant les jeux de fontes avec des
hauteurs de 15 et 13 ont le meilleur support Unicode, gr&acirc;ce
aux fontes 9x15 et 6x13 de Markus Kuhn. Pour ouvrir un fichier
encod&eacute; en UTF-8, vous pouvez taper</p>
<blockquote>
<pre>
<code>M-x universal-coding-system-argument unicode-utf8 RET
M-x find-file filename RET
</code>
</pre></blockquote>
ou
<blockquote>
<pre>
<code>C-x RET c unicode-utf8 RET
C-x C-f filename RET
</code>
</pre></blockquote>
<p>Notez que cela marche avec Emacs seulement en mode
fen&ecirc;tre, pas en mode terminal.</p>
<p>Richard Stallman pr&eacute;voit &agrave; long terme d'ajouter un
support d'UTF-8 int&eacute;gr&eacute; &agrave; Emacs.</p>
<h3>Xemacs</h3>
<p>(Cette section est &eacute;crite par Gilbert Baumann.)</p>
<p>Voici comment apprendre &agrave; XEmacs (20.4 configur&eacute;
avec MULE) l'encodage UTF-8. Malheureusement vous aurez besoin des
sources pour pouvoir le patcher.</p>
<p>D'abord vous aurez besoin de ces fichiers fournis par Tomohiko
Morioka&nbsp;:</p>
<p><a href=
"http://turnbull.sk.tsukuba.ac.jp/Tools/XEmacs/xemacs-21.0-b55-emc-b55-ucs.diff">
http://turnbull.sk.tsukuba.ac.jp/Tools/XEmacs/xemacs-21.0-b55-emc-b55-ucs.diff</a></p>
<p><a href=
"http://turnbull.sk.tsukuba.ac.jp/Tools/XEmacs/xemacs-ucs-conv-0.1.tar.gz">
http://turnbull.sk.tsukuba.ac.jp/Tools/XEmacs/xemacs-ucs-conv-0.1.tar.gz</a></p>
<p>Le .diff est un diff pour les sources C. Le tarball contient du
code elisp, qui fournit beaucoup de tables de code qui permettent
la conversion depuis et vers Unicode. Comme le nom du diff le
sugg&egrave;re, il est pr&eacute;vu pour XEmacs-21. J'ai eu besoin
d'aider un peu 'patch'. La diff&eacute;rence la plus notable avec
mes sources XEmacs-20.4 est que file-coding.[ch] &eacute;tait
appel&eacute; mule-coding.[ch]</p>
<p>Pour ceux qui connaissent peu XEmacs-MULE (comme moi) voici un
guide rapide&nbsp;:</p>
<p>Ce que nous appelons un encodage est appel&eacute; par MULE
"coding system". Les commandes les plus importantes sont&nbsp;:</p>
<blockquote>
<pre>
<code>M-x set-file-coding-system
M-x set-buffer-process-coding-system [comint buffer]
</code>
</pre></blockquote>
<p>et la variable 'file-coding-system-alist', qui guide 'find-file'
pour qu'il trouve l'encodage utilis&eacute;. Une fois que tout
marchait, la premi&egrave;re chose que j'ai faite fut <a href=
"gb-hacks.el">ceci</a>.</p>
<p>Ce code cherche une ligne de mode sp&eacute;ciale
commen&ccedil;ant par _*_ quelque part dans les 600 premiers octets
du fichier qui va &ecirc;tre ouvert. Si cette ligne contient un
champ "Encoding: xyz;" et que l'encodage xyz ("coding system" dans
le langage d'Emacs) existe, il le s&eacute;lectionne. Donc
maintenant vous pouvez utiliser&nbsp;:</p>
<blockquote>
<pre>
<code>;;;  _*_ Mode: Lisp; Syntax: Common-Lisp; Package: CLEX; Encoding:
utf-8; _*_
</code>
</pre></blockquote>
<p>et Emacs entrera en mode utf-8 &agrave; partir de l&agrave;.</p>
<p>Une fois que tout marchait, j'ai d&eacute;fini une macro pour
\u03BB (lambda grec) comme ceci&nbsp;:&nbsp;</p>
<blockquote>
<pre>
<code>(defmacro \u03BB (x) '(lambda .,x))
</code>
</pre></blockquote>
<h3>nedit</h3>
<h3>xedit</h3>
<p>En th&eacute;orie, <code>xedit</code> devrait &ecirc;tre capable
d'&eacute;diter des fichiers UTF-8 si vos locales sont
configur&eacute;es en cons&eacute;quence (voir au dessus), et que
vous ajoutez la ligne "Xedit*international: true" &agrave; votre
fichier $HOME/.Xdefaults.&nbsp; En pratique, il reconna&icirc;tra
les encodages UTF-8 des caract&egrave;res non ASCII, mais il les
affichera comme des s&eacute;quences de caract&egrave;res "@".</p>
<h3>axe</h3>
<p>En th&eacute;orie, <code>axe</code> devrait &ecirc;tre capable
d'&eacute;diter des fichiers UTF-8 si vos locales sont
configur&eacute;es en cons&eacute;quence (voir au dessus), et que
vous ajoutez la ligne "Axe*International: true" &agrave; votre
fichier $HOME/.Xdefaults. En pratique, il vous laissera simplement
un joli fichier core.</p>
<h3>pico</h3>
<h3>TeX</h3>
<p>Les distributions de teTex 0.9 (et sup&eacute;rieures)
contiennent une adaptation Unicode de TeX, appel&eacute;e Omega (
<a href=
"http://www.gutenberg.eu.org/omega/">http://www.gutenberg.eu.org/omega/</a>
<a href=
"ftp://ftp.ens.fr/pub/tex/yannis/omega">ftp://ftp.ens.fr/pub/tex/yannis/omega</a>),
mais est-ce que quelqu'un conna&icirc;trait un tutorial sur ce
syst&egrave;me&nbsp;?</p>
<p>Autres liens peut-&ecirc;tre en rapport&nbsp;:<br>
<a href=
"http://www.dante.de/projekte/nts/NTS-FAQ.html">http://www.dante.de/projekte/nts/NTS-FAQ.html</a>,<br>

<a href=
"ftp://ftp.dante.de/pub/tex/language/chinese/CJK/">ftp://ftp.dante.de/pub/tex/language/chinese/CJK/</a></p>
<h2><a name="ss4.4">4.4 Les logiciels de courrier
&eacute;lectronique</a></h2>
<p>MIME&nbsp;: RFC 2279 d&eacute;finit les jeux de
caract&egrave;res UTF-8 et MIME, qui peuvent &ecirc;tre convertis
en encodage 8-bits, quoted-printable ou base64. L'ancienne norme
MIME UTF-7 (RFC 2152) est consid&eacute;r&eacute;e comme
&eacute;tant obsol&egrave;te ("deprecated") et ne devrait plus
&ecirc;tre utilis&eacute;e.</p>
<p>Les clients mail sortis apr&egrave;s le 1er janvier 1999
devraient &ecirc;tre capables d'envoyer et d'afficher des courriers
encod&eacute;s en UTF-8, sous peine d'&ecirc;tre
consid&eacute;r&eacute;s comme incomplets. Mais ces courriers
doivent contenir les &eacute;tiquettes (labels) MIME&nbsp;:</p>
<blockquote>
<pre>
<code>Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8-bit
</code>
</pre></blockquote>
<p>Envoyer simplement un fichier UTF-8 vers "mail" via un
<em>pipe</em> sans faire attention aux labels MIME ne fonctionnera
pas. Les gens qui impl&eacute;mentent des clients de courrier
devraient jeter un oeil &agrave; <a href=
"http://www.imc.org/imc-intl/">http://www.imc.org/imc-intl/</a> et
<a href=
"http://www.imc.org/mail-i18n.html">http://www.imc.org/mail-i18n.html</a></p>
<p>Parlons maintenant des clients mail individuels (ou "mail user
agents")&nbsp;:</p>
<h3>pine</h3>
<p>La situation pour une version non patch&eacute;e de pine 4.10
est la suivante.</p>
<p>Pine ne fait pas de conversion de jeu de caract&egrave;res. Mais
il vous permet de voir des courriers UTF-8 dans une fen&ecirc;tre
texte UTF-8 (console Linux ou xterm).</p>
<p>Normalement, Pine se plaindra du fait qu'il y a
diff&eacute;rents jeux de caract&egrave;res &agrave; chaque fois
que vous visualiserez un courrier encod&eacute; en UTF-8. Pour vous
d&eacute;barrasser de cet avertissement, choisissez S (setup), puis
C (config), et changez la valeur de "character set" &agrave; UTF-8.
Cette option ne fera rien &agrave; part r&eacute;duire le nombre
d'avertissements, puisque Pine ne conna&icirc;t pas UTF-8 en
interne.</p>
<p>Notez aussi que pour Pine la notion de caract&egrave;res Unicode
est tr&egrave;s limit&eacute;e&nbsp;: il affichera les
caract&egrave;res latins et grecs, mais ce sont les seuls types de
caract&egrave;res Unicode qu'il conna&icirc;t.</p>
<p>Un patch de Robert Brady <a href=
"http://www.ents.susu.soton.ac.uk/~robert/pine-utf8-0.1.diff">http://www.ents.susu.soton.ac.uk/~robert/pine-utf8-0.1.diff</a>
ajoute &agrave; Pine un support UTF-8. Avec ce patch, il peut
d&eacute;coder et afficher les ent&ecirc;tes et le corps des
messages correctement. Ce patch n&eacute;cessite GNOME libunicode
<a href=
"http://cvs.gnome.org/lxr/source/libunicode/">http://cvs.gnome.org/lxr/source/libunicode/</a>.</p>
<h3>Kmail</h3>
<p>Kmail (comme tout KDE 1.0) ne contient absolument aucun support
pour les mails en UTF-8.</p>
<h3>Netscape Communicator</h3>
<p>Le Messenger de Netscape Communicator peut envoyer et afficher
des mails encod&eacute;s en UTF-8, mais cela n&eacute;cessite
quelques interventions manuelles de l'utilisateur.</p>
<p>Pour envoyer un mail encod&eacute; en UTF-8&nbsp;: apr&egrave;s
avoir ouvert la fen&ecirc;tre "Compose", mais avant de commencer
&agrave; composer le message, s&eacute;lectionnez dans le menu
"View -&gt; Character Set -&gt;Unicode (UTF-8)" puis composez votre
message et envoyez le.</p>
<p>Quand vous recevez un courrier encod&eacute; en UTF-8, Netscape
ne l'affiche malheureusement pas en UTF-8 directement, et ne donne
m&ecirc;me pas un indice visuel montrant que le courrier a
&eacute;t&eacute; encod&eacute; en UTF-8. Vous devez
s&eacute;lectionner manuellement l'option ad&eacute;quate dans
"View -&gt; Character Set -&gt; Unicode (UTF-8)". Pour afficher les
courriers UTF-8, Netscape utilise des fontes
diff&eacute;renci&eacute;es. Vous pouvez ajuster la fonte
utilis&eacute;e dans la bo&icirc;te de dialogue "Edit -&gt;
Preferences -&gt; Fonts". Choisissez la cat&eacute;gorie de fontes
"Unicode".</p>
<h3>Emacs (rmail, vm)</h3>
<h2><a name="ss4.5">4.5 Autres applications en mode texte</a></h2>
<h3>less</h3>
<p>Tel&eacute;chargez <a href=
"ftp://ftp.gnu.org/pub/gnu/less/less-340.tar.gz">ftp://ftp.gnu.org/pub/gnu/less/less-340.tar.gz</a>
et appliquez le patch <a href=
"less-340-utf-2.diff">less-340-utf-2.diff</a> de Robert Brady
<a href=
"mailto:rwb197@ecs.soton.ac.uk">&lt;rwb197@ecs.soton.ac.uk&gt;</a>.
Puis positionnez la variable d'environnement LESSCHARSET&nbsp;:</p>
<blockquote>
<pre>
<code>export LESSCHARSET=utf-8
</code>
</pre></blockquote>
Si vous avez positionn&eacute; une variable d'environnement
LESSKEY, v&eacute;rifiez aussi que le fichier vers lequel elle
pointe ne d&eacute;finit pas LESSCHARSET. Si n&eacute;cessaire,
r&eacute;g&eacute;n&eacute;rez ce fichier en utilisant la commande
'lesskeys', ou enlevez la variable d'environnement LESSKEYS.
<h3>expand, wc</h3>
<p>Procurez vous GNU textutils-2.0 et appliquez le patch <a href=
"textutils-2.0.diff">textutils-2.0.diff</a>, puis lancez
configure.<br>
Ajoutez "#define HAVE_MBRTOWC 1", "#define HAVE_FPUTWC 1" &agrave;
config.h. Dans src/Makefile, modifiez CFLAGS et LDFLAGS pour qu'ils
incluent les r&eacute;pertoires o&ugrave; libutf8 est
install&eacute;, puis recompilez.</p>
<h3>col, colcrt, colrm, column, rev, ul</h3>
<p>Procurez vous le package util-linux-2.9y, configurez le, puis
d&eacute;finissez ENABLE_WIDECHAR dans defines.h , changez le "# if
0" en "# if 1" dans lib/widechar.h. dans text-utils/Makefile,
modifiez CFLAGS et LDFLAGS pour qu'ils incluent les
r&eacute;pertoires o&ugrave; libutf8 est install&eacute;. Puis
recompilez.</p>
<h3>figlet</h3>
<p>Figlet 2.2 a une option pour g&eacute;rer l'entr&eacute;e en
UTF-8&nbsp;: "figlet -C utf-8".</p>
<h3>kermit</h3>
<p>Le programme de communication s&eacute;rie C-Kermit <a href=
"http://www.columbia.edu/kermit/">http://www.columbia.edu/kermit/</a>,
dans les versions 7.0beta10 et sup&eacute;rieures, comprend les
encodages de fichier et de transfert UTF-8 et UCS-2, et l'encodage
de terminal UTF-8. La documentation de ces caract&eacute;ristiques
peut &ecirc;tre trouv&eacute;e &agrave; <a href=
"ftp://kermit.columbia.edu/kermit/test/text/ckermit2.txt">ftp://kermit.columbia.edu/kermit/test/text/ckermit2.txt</a></p>
<h2><a name="ss4.6">4.6 Autres applications X11</a></h2>
<p>La Xlib de X11 ne peut malheureusement pas encore localiser
UTF-8, cela devrait &ecirc;tre travaill&eacute; prochainement.</p>
<h2><a name="s5">5. Comment faire pour que vos programmes
comprennent Unicode</a></h2>
<h2><a name="ss5.1">5.1 C/C++</a></h2>
<p>Le type C '<code>char</code>' est 8-bits et restera 8-bits parce
qu'il d&eacute;signe la plus petite unit&eacute; de donn&eacute;es
adressable. Divers am&eacute;nagements sont
disponibles&nbsp;:&nbsp;</p>
<h3>Pour le traitement de texte normal</h3>
<p>Le standard ISO/ANSI C contient, dans une correction qui fut
ajout&eacute;e en 1995, un type de caract&egrave;re cod&eacute; sur
16 bits `<code>wchar_t</code>', un ensemble de fonctions comme
celles contenues dans <code>&lt;string.h&gt;</code> et
<code>&lt;ctype.h&gt;</code> (d&eacute;clar&eacute;es
respectivement dans <code>&lt;wchar.h&gt;</code> et
<code>&lt;wctype.h&gt;</code>), et un ensemble de fonctions de
conversion entre `<code>char *</code>' et `<code>wchar_t *</code>'
(d&eacute;clar&eacute;es dans <code>&lt;stdlib.h&gt;</code>).</p>
<p>Voici de bonnes r&eacute;ferences pour cette interface de
programmation&nbsp;:</p>
<ul>
<li>Le manuel de GNU libc-2.1, chapitres 4 "Characters Handling" et
6 "Character Set Handling"</li>
<li>Les pages de manuel <a href=
"man-mbswcs.tar.gz">man-mbswcs.tar.gz</a></li>
<li>La r&eacute;f&eacute;rence de la biblioth&egrave;que C
Dinkumware <a href=
"http://www.dinkumware.com/htm_cl/">http://www.dinkumware.com/htm_cl/</a></li>
<li>La sp&eacute;cification Single Unix d'OpenGroup <a href=
"http://www.UNIX-systems.org/online.html">http://www.UNIX-systems.org/online.html</a></li>
</ul>
<p>Avantages de cette interface de programmation&nbsp;:</p>
<ul>
<li>C'est un standard non propri&eacute;taire.</li>
<li>Ces fonctions font ce qu'il faut, selon les locales de
l'utilisateur. Tout ce qu'un programme doit faire est d'appeler
<code>setlocale(LC_ALL,"");</code>.</li>
</ul>
<p>Inconv&eacute;nients de cette interface de
programmation&nbsp;:</p>
<ul>
<li>Certaines de ces fonctions ne sont pas "multithread-safe" parce
qu'elles conservent un &eacute;tat interne cach&eacute; entre les
appels de fonction.</li>
<li>Il n'y a pas de type de donn&eacute;e de premi&egrave;re
classe. Par cons&eacute;quent cette API ne peut pas &ecirc;tre
utilis&eacute;e raisonnablement pour tout ce qui n&eacute;cessite
plus d'une locale ou d'un jeu de caract&egrave;res au m&ecirc;me
moment.</li>
<li>La plupart des syst&egrave;mes d'exploitation ont un mauvais
support de cette interface de programmation.</li>
</ul>
<h3>Notes concernant la portabilit&eacute;</h3>
<p>Une variable `<code>wchar_t</code>' peut &ecirc;tre
encod&eacute;e en Unicode ou non. Ceci d&eacute;pend de la
plateforme et quelquefois aussi des locales. Une s&eacute;quence
multi-octets `<code>wchar_t</code>' peut &ecirc;tre encod&eacute;e
en UTF-8 ou non selon la plateforme, et parfois selon les
locales.</p>
<p>En d&eacute;tails, voici ce que la <a href=
"http://www.UNIX-systems.org/online.html">Single Unix
specification</a> dit &agrave; propos du type
`<code>wchar_t</code>'&nbsp;:</p>
<p><em>Tous les codes de caract&egrave;res 16 bits dans un
processus donn&eacute; consistent en un nombre &eacute;gal de bits.
Ceci en contraste avec les caract&egrave;res, qui peuvent
&ecirc;tre constitu&eacute;s d'un nombre variable d'octets. L'octet
ou la s&eacute;quence d'octets qui repr&eacute;sentent un
caract&egrave;re peuvent aussi &ecirc;tre repr&eacute;sent&eacute;s
comme un code de caract&egrave;re 16 bits. Les codes de
caract&egrave;res 16 bits fournissent donc une taille uniforme pour
manipuler les donn&eacute;es textuelles. Un code de
caract&egrave;re 16 bits ayant tous les bits &agrave; 0 est un code
de caract&egrave;re 16 bits nul (null), et termine une
cha&icirc;ne. La valeur des caract&egrave;res larges pour chaque
membre du "Portable Character Set"</em> (i.e ASCII) <em>est
&eacute;gale quand il est utilis&eacute; en tant que seul
caract&egrave;re dans un caract&egrave;re entier (integer)
constant. Les codes de caract&egrave;res 16 bits pour les autres
caract&egrave;res d&eacute;pendent des locales et de
l'impl&eacute;mentation. Les octets modificateurs d'&eacute;tat
n'ont pas de repr&eacute;sentation en code de caract&egrave;re 16
bits.</em></p>
<p>Une cons&eacute;quence notable est que dans des programmes
portables vous ne devriez pas utiliser des caract&egrave;res
non-ASCII dans des cha&icirc;nes litt&eacute;rales. Cela signifie
que m&ecirc;me si vous savez que les doubles guillemets ont les
codes U+201C et U+201D, vous ne devriez pas &eacute;crire une
cha&icirc;ne litt&eacute;rale <code>L"\u201cBonjour\u201d, dit
il"</code> ou <code>"\xe2\x80\x9cBonjour\xe2\x80\x9d, dit
il"</code> dans des programmes C. Utilisez plut&ocirc;t GNU gettext
comme cela&nbsp;: <code>gettext ("'Bonjour', dit il")</code>, et
cr&eacute;ez une base de donn&eacute;es de messages en.UTF-8.po qui
traduit "'Bonjour' dit il" en <code>"\u201cBonjour\u201d, dit
il"</code>.</p>
<p>Voici une &eacute;tude de la portabilit&eacute; des
am&eacute;nagements ISO/ANSI C sur diverses impl&eacute;mentations
d'Unix. La GNU glibc-2.2 les supportera tous, mais pour l'instant
nous avons le tableau suivant.</p>
<dl>
<dt><b>GNU glibc-2.0.x, glibc-2.1.x</b></dt>
<dd>
<ul>
<li>&lt;wchar.h&gt; et &lt;wctype.h&gt; existent.</li>
<li>Poss&egrave;de les fonctions wcs/mbs, mais pas
fgetwc/fputwc/wprintf.</li>
<li>Pas de locales UTF-8.</li>
<li>mbrtowc retourne EILSEQ pour les octets &gt;= 0x80.</li>
</ul>
</dd>
<dt><b>Solaris 2.7</b></dt>
<dd>
<ul>
<li>&lt;wchar.h&gt; et &lt;wctype.h&gt; existent.</li>
<li>Poss&egrave;de toutes les fonctions wcs/mbs,
fgetwc/fputwc/wprintf.</li>
<li>Supporte les locales UTF-8 suivantes&nbsp;: en_US.UTF-8,
de.UTF-8, es.UTF-8, fr.UTF-8, it.UTF-8, sv.UTF-8.</li>
<li>mbrtowc retourne EILSEQ pour les octets &gt;= 0x80.</li>
</ul>
</dd>
<dt><b>OSF/1 4.0d</b></dt>
<dd>
<ul>
<li>&lt;wchar.h&gt; et &lt;wctype.h&gt; existent.</li>
<li>Poss&egrave;de toutes les fonctions wcs/mbs,
fgetwc/fputwc/wprintf.</li>
<li>A en plus universal.utf8@ucs4 locale, voir "man 5
unicode".</li>
<li>mbrtowc ne conna&icirc;t pas UTF-8.</li>
</ul>
</dd>
<dt><b>Irix 6.5</b></dt>
<dd>
<ul>
<li>&lt;wchar.h&gt; et &lt;wctype.h&gt; existent.</li>
<li>Poss&egrave;de les fonctions wcs/mbs et fgetwc/fputwc, mais pas
wprintf.</li>
<li>N'a pas de locales multi-octets.</li>
<li>A seulement un simulacre de d&eacute;finition pour
mbstate_t.</li>
<li>N'a pas mbrtowc.</li>
</ul>
</dd>
<dt><b>HP-UX 11.00</b></dt>
<dd>
<ul>
<li>&lt;wchar.h&gt; existe, mais pas &lt;wctype.h&gt;.</li>
<li>Poss&egrave;de les fonctions wcs/mbs et fgetwc/fputwc, mais pas
wprintf.</li>
<li>A une locale C.utf8.</li>
<li>N'a pas mbstate_t.</li>
<li>N'a pas mbrtowc.</li>
</ul>
</dd>
<dt><b>AIX 4.2</b></dt>
<dd>
<ul>
<li>&lt;wchar.h&gt; existe, mais pas &lt;wctype.h&gt; - utilisez
&agrave; la place &lt;ctype.h&gt; et &lt;wchar.h&gt;.</li>
<li>Poss&egrave;de les fonctions wcs/mbs et fgetwc/fputwc, mais pas
wprintf.</li>
<li>Poss&egrave;de les locales UTF-8 suivantes&nbsp;: ET_EE.UTF-8,
LT_LT.UTF-8, LV_LV.UTF-8, ZH_CN.UTF-8.</li>
<li>N'a pas mbstate_t.</li>
<li>N'a pas mbrtowc.</li>
</ul>
</dd>
</dl>
<p>Par cons&eacute;quent je recommande l'utilisation des fonctions
red&eacute;marrables et multithread-safe wcsr/mbsr. Oubliez les
syst&egrave;mes qui ne les ont pas (Irix, HP-UX, Aix), et utilisez
le plug-in qui permet d'utiliser des locales UTF-8, libutf8_plug.so
(voir ci dessous) sur les syst&egrave;mes qui vous permettent de
compiler des programmes qui utilisent ces fonctions wcrs/mbsr
(Linux, Solaris, OSF/1).</p>
<p>Un avis similaire, donn&eacute; par Sun dans <a href=
"http://www.sun.com/software/white-papers/wp-unicode/">http://www.sun.com/software/white-papers/wp-unicode/</a>,
section "Internationalized Applications with Unicode",
est&nbsp;:</p>
<p><em>Pour internationaliser correctement une application utilisez
les indications suivantes&nbsp;:</em></p>
<ol>
<li><em>&Eacute;vitez l'acc&egrave;s direct &agrave; Unicode. Ceci
est la t&acirc;che de la couche d'internationalisation de la
plateforme.</em></li>
<li><em>Utilisez le mod&egrave;les POSIX pour les interfaces
multi-octets et &agrave; caract&egrave;res 16 bits.</em></li>
<li><em>Appelez seulement les fonctions de l'API que la couche
d'internationalisation fournit pour la langue et les
op&eacute;ration sp&eacute;cifiques &agrave; la culture.</em></li>
<li><em>Restez ind&eacute;pendant de l'encodage.</em></li>
</ol>
<p>Si, pour une raison quelconque, vous devez vraiment supposer que
'wchar_t' est Unicode dans un morceau de code (par exemple, si vous
voulez faire un traitement sp&eacute;cial de certains
caract&egrave;res Unicode), vous devriez rendre ce bout de code
conditionnel selon le r&eacute;sultat de
<code>is_locale_utf88()</code>. Autrement vous allez mettre la
pagaille dans le comportement de votre programme sur d'autres
plateformes, ou si d'autres locales sont utilis&eacute;es. La
fonction <code>is_locale_utf8()</code> est d&eacute;clar&eacute;e
dans <a href="utf8locale.h">utf8locale.h</a> et d&eacute;finie dans
<a href="utf8locale.c">utf8locale.c</a>.</p>
<h3>La biblioth&egrave;que libutf8</h3>
<p>Une impl&eacute;mentation portable de l'API ISO/ANSI C, qui
supporte les locales 8-bits et les locales UTF-8, peut &ecirc;tre
trouv&eacute;e dans <a href=
"libutf8-0.5.2.tar.gz">libutf8-0.5.2.tar.gz</a></p>
<p>Avantages&nbsp;:</p>
<ul>
<li>D&egrave;s maintenant un support pour Unicode UTF-8 portable,
m&ecirc;me sur les syst&egrave;mes d'exploitation dont le support
des caract&egrave;res multi-octets ne marche pas, ou qui n'ont pas
du tout de support pour les caract&egrave;res
multi-octets/larges.</li>
<li>Le m&ecirc;me binaire marche pour toutes les locales 8-bit et
les locales UTF-8 support&eacute;es par le syst&egrave;me.</li>
<li>Quand un syst&egrave;me d'exploitation fournit un vrai support
pour les caract&egrave;res multi-octets, vous pouvez en tirer
avantage simplement en recompilant sans l'option du compilateur
-DHAVE_LIBUTF8.</li>
</ul>
<h3>La m&eacute;thode Plan9</h3>
<p>Le syst&egrave;me d'exploitation Plan9, une variante d'Unix,
utilise UTF-8 comme encodage dans toutes ses applications. Son type
de caract&egrave;re large est appel&eacute; '<code>Rune</code>',
pas '<code>wchar_</code>'. Des parties ce ses biblioth&egrave;ques,
&eacute;crites par Rob Pike et Howard Trikey, sont disponibles
&agrave; <a href=
"ftp://ftp.cdrom.com/pub/netlib/research/9libs/9libs-1.0.tar.gz">ftp://ftp.cdrom.com/pub/netlib/research/9libs/9libs-1.0.tar.gz</a>.
Une autre biblioth&egrave;que similaire, &eacute;crite par Alistair
G. Crook, est &agrave; <a href=
"ftp://ftp.cdrom.com/pub/NetBSD/packages/distfiles/libutf-2.10.tar.gz">
ftp://ftp.cdrom.com/pub/NetBSD/packages/distfiles/libutf-2.10.tar.gz</a>.<br>

En particulier, chacune de ces biblioth&egrave;ques contient un
moteur d'expressions rationnelles qui comprend l'UTF-8.</p>
<p>D&eacute;savantages de cette API&nbsp;:</p>
<ul>
<li>UTF-8 est compil&eacute; dans la biblioth&egrave;que, pas
optionnel. Les programmes compil&eacute;s dans cet univers perdent
le support des encodages 8-bits qui sont toujours utilis&eacute;s
fr&eacute;quemment en Europe.</li>
</ul>
<h3>Pour les interfaces utilisateur graphiques</h3>
<p>La biblioth&egrave;que QT-2.0 <a href=
"http://www.troll.no/">http://www.troll.no/</a> contient la classe
QString qui est totalement Unicode. Vous pouvez utiliser les
fonctions membres QString::utf8 et QString::fromUtf8 pour convertir
depuis/vers un texte encod&eacute; en UTF-8. Les fonctions membres
QString::ascii et QString::latin1 ne devraient plus &ecirc;tre
utilis&eacute;es.</p>
<h3>Pour la manipulation de texte avanc&eacute;e</h3>
<p>Les biblioth&egrave;ques mentionn&eacute;es
pr&eacute;c&eacute;demment impl&eacute;mentent des versions des
concepts ASCII qui comprennent Unicode. Voici des
biblioth&egrave;ques qui traitent des concepts Unicode, comme
titlecase (Une troisi&egrave;me casse de lettres, diff&eacute;rente
des majuscules et des minuscules), la distinction entre la
ponctuation et les symboles, la d&eacute;composition canonique, les
classes combinables, le classement canonique et d'autres choses du
m&ecirc;me genre.</p>
<dl>
<dt><b>ucdata-1.9</b></dt>
<dd>
<p>La biblioth&egrave;que ucdata de Mark Leisher <a href=
"http://crl.nmsu.edu/~mleisher/ucdata.html">http://crl.nmsu.edu/~mleisher/ucdata.html</a>
s'occupe des propri&eacute;t&eacute;s des caract&egrave;res, de la
conversion de la casse, de la d&eacute;composition, des classes
combin&eacute;es.</p>
</dd>
<dt><b>ICU</b></dt>
<dd>
<p>Ce sont les classes IBM pour Unicode. <a href=
"http://www.alphaworks.ibm.com/tech/icu/">http://www.alphaworks.ibm.com/tech/icu/</a>.
Une biblioth&egrave;que tr&egrave;s d&eacute;taill&eacute;e
comprenant des cha&icirc;nes de caract&egrave;res Unicode, des
paquets de ressources, des formateurs de nombres, de date, d'heure
et de messages, des assemblages, des assembleurs de messages et
plus encore. Beaucoup de locales sont support&eacute;es. Cette
biblioth&egrave;que est portable pour Unix et Win32, mais compilera
sans intervention ("out of the box") seulement avec la libc6, pas
la libc5.</p>
</dd>
<dt><b>libunicode</b></dt>
<dd>
<p>La librairie Unicode de GNOME <a href=
"http://cvs.gnome.org/lxr/source/libunicode/">http://cvs.gnome.org/lxr/source/libunicode/</a>
de Tom Tromey entre autres. Elle couvre la conversion du jeu de
caract&egrave;res, les propri&eacute;t&eacute;s des
caract&egrave;res, la d&eacute;composition.</p>
</dd>
</dl>
<h3>Pour la conversion</h3>
<p>Deux biblioth&egrave;ques de conversion qui supportent UTF-8 et
un grand nombre de de jeux de caract&egrave;res 8-bits, sont
disponibles&nbsp;:</p>
<h3>L'impl&eacute;mentation iconv d'Ulrich Drepper, contenue dans
la GNU glibc-2.2.1</h3>
<p><a href=
"ftp://ftp.gnu.org/pub/gnu/glibc/glibc-2.1.1.tar.gz">ftp://ftp.gnu.org/pub/gnu/glibc/glibc-2.1.1.tar.gz</a>.</p>
<p>Avantages&nbsp;:</p>
<ul>
<li>iconv est conforme au standard POSIX, les programmes qui
l'utilisent pour la conversion depuis/vers UTF-8 tourneront aussi
sous Solaris. Cependant le nom des jeux de caract&egrave;res
diff&egrave;re entre les plateformes. Par exemple, "EUC-JP" sous
glibc devient "eucJP" sous HP-UX. (Le nom INIA officiel pour ce jeu
de caract&egrave;res est "EUC-JP". Il s'agit donc clairement d'une
d&eacute;ficience de HP-UX.)</li>
<li>Aucune biblioth&egrave;que suppl&eacute;mentaire n'est
n&eacute;cessaire.</li>
</ul>
<h3>librecode par Fran&ccedil;ois Pinard</h3>
<p><a href=
"ftp://ftp.gnu.org/pub/gnu/recode/recode-3.5.tar.gz">ftp://ftp.gnu.org/pub/gnu/recode/recode-3.5.tar.gz</a>.</p>
<p>Avantages&nbsp;:</p>
<ul>
<li>Support pour la translitt&eacute;ration, i.e conversion de
caract&egrave;res non-ASCII en s&eacute;quences de
caract&egrave;res ASCII de fa&ccedil;on &agrave; pr&eacute;server
la lisibilit&eacute; pour les humains, m&ecirc;me lorsqu'une
transformation sans pertes est impossible.</li>
</ul>
<p>Probl&egrave;mes&nbsp;:</p>
<ul>
<li>Cette API est non standard.</li>
</ul>
<h3>Les autre approches</h3>
<dl>
<dt><b>libutf-8</b></dt>
<dd>
<p>libutf-8, de G.Adam.Stanislav <a href=
"mailto:adam@whizkidtech.net">&lt;adam@whizkidtech.net&gt;</a>
contient quelques fonctions pour la conversion depuis/vers des flux
"FILE*". <a href=
"http://www.whizkidtech.net/i18n/libutf-8-1.0.tar.gz">http://www.whizkidtech.net/i18n/libutf-8-1.0.tar.gz</a><br>

Avantages&nbsp;:</p>
<ul>
<li>Tr&egrave;s petit.</li>
</ul>
<p>Probl&egrave;mes&nbsp;:</p>
<ul>
<li>API non standard&nbsp;;</li>
<li>UTF-8 est compil&eacute; dans la biblioth&egrave;que, pas
optionnel. Les programmes compil&eacute;s dans cet univers perdent
le support des encodages 8-bits qui sont toujours utilis&eacute;s
fr&eacute;quemment en Europe&nbsp;;</li>
<li>L'installation n'est pas &eacute;vidente&nbsp;: le Makefile
doit &ecirc;tre modifi&eacute;. Pas d'auto-configuration.</li>
</ul>
</dd>
</dl>
<h2><a name="ss5.2">5.2 Java</a></h2>
<p>Java supporte Unicode en interne. Le type 'char' d&eacute;signe
un caract&egrave;re Unicode, et la classe 'java.lang.String'
d&eacute;signe une cha&icirc;ne de caract&egrave;res construite
&agrave; partir de caract&egrave;res Unicode.</p>
<p>Java peut afficher n'importe quel caract&egrave;re &agrave;
travers son syst&egrave;me de fen&ecirc;trage AWT, &agrave;
condition que</p>
<ol>
<li>vous positionniez la propri&eacute;t&eacute; syst&egrave;me
"user.language" de fa&ccedil;on appropri&eacute;e.</li>
<li>Les d&eacute;finitions de jeux de fontes
/usr/lib/java/lib/font.properties.<i>language</i> soient
appropri&eacute;es, et</li>
<li>Le fontes sp&eacute;cifi&eacute;es dans ce fichier soient
install&eacute;es.</li>
</ol>
Par exemple, pour afficher du texte contenant des caract&egrave;res
japonais, vous devriez installer des fontes japonaise, et lancer
"java -Duser.language=ja ...". Vous pouvez combiner les jeux de
fontes&nbsp;: pour pouvoir afficher des caract&egrave;res d'Europe
de l'ouest, grecs et japonais simultan&eacute;ment, vous devriez
cr&eacute;er une combinaison des fichiers "font.properties" (couvre
ISO-8859-1), "font.properties.el" (couvre ISO-8859-7) et
"font.properties.ja" dans un seul fichier. ??Ceci n'a pas
&eacute;t&eacute; test&eacute;??
<p>Les interfaces java.io.DataInput et java.io.DataOutput
contiennent des m&eacute;thodes appel&eacute;es 'readUTF', et
'writeUTF' respectivement. Mais notez qu'elles n'utilisent pas
UTF-8&nbsp;; elles utilisent un encodage UTF-8
modifi&eacute;&nbsp;: le caract&egrave;re NUL est encod&eacute;
dans une s&eacute;quence de deux octets 0xC0 et 0x80 &agrave; la
place de 0x00, et un octet 0x00 est ajout&eacute; &agrave; la fin.
Encod&eacute;es de cette fa&ccedil;on, les cha&icirc;nes peuvent
contenir des caract&egrave;res NUL mais elles doivent
n&eacute;anmoins &ecirc;tre pr&eacute;fix&eacute;es par un champ de
taille. Les fonctions C &lt;string.h&gt; comme strlen() et strcpy()
peuvent &ecirc;tre utilis&eacute;es pour les manipuler.</p>
<h2><a name="ss5.3">5.3 Lisp</a></h2>
<p>Le standard Lisp ordinaire d&eacute;termine deux types de
caract&egrave;res&nbsp;: 'base-char' et 'character'. C'est &agrave;
l 'impl&eacute;mentation d'ajouter un support Unicode ou non. Ce
langage d&eacute;termine aussi un mot-clef argument
':external-format' pour 'open' comme place naturelle pour
sp&eacute;cifier un jeu de caract&egrave;res ou un encodage.</p>
<p>Parmi les impl&eacute;mentation gratuites du lisp standard, seul
CLISP <a href="http://clisp.cons.org/">http://clisp.cons.org/</a>
supporte Unicode. Vous aurez besoin d'une version de CLISP datant
de juillet 99 ou plus r&eacute;cente. <a href=
"ftp://clisp.cons.org/pub/lisp/clisp/source/clispsrc.tar.gz">ftp://clisp.cons.org/pub/lisp/clisp/source/clispsrc.tar.gz</a>
Les types "base-char" et "character" sont tous &eacute;quivalents
au 16-bits Unicode. L'encodage utilis&eacute; pour le fichier ou
l'I/O socket/pipe peut &ecirc;tre sp&eacute;cifi&eacute; par
l'argument ':external-format'. Les encodages utilis&eacute;s pour
les op&eacute;rations d'entr&eacute;e/sortie sur des ttys et
l'encodage par d&eacute;faut pour les I/O file/socket
d&eacute;pendent des locales.</p>
<p>Parmi les impl&eacute;mentations commerciales du Lisp standard,
seule Eclipse <a href=
"http://www.elwood.com/eclipse/eclipse.htm">http://www.elwood.com/eclipse/eclipse.htm</a>
supporte Unicode. Voir <a href=
"http://www.elwood.com/eclipse/char.htm">http://www.elwood.com/eclipse/char.htm</a>
Le type 'base-char' est &eacute;quivalent &agrave; ISO-8859-1, et
le type 'character' contient tous les caract&egrave;res Unicode.
L'encodage utilis&eacute; pour les entr&eacute;es/sorties sur un
fichier peut &ecirc;tre d&eacute;fini &agrave; travers une
combinaison des arguments de 'open' ':element-type' et
:'external.format'.<br>
Limitations&nbsp;: les fonctions d'attributs de caract&egrave;res
sont d&eacute;pendantes des locales. Les sources et les fichiers de
sources compil&eacute;s ne peuvent pas contenir des cha&icirc;nes
Unicode litt&eacute;rales. L'impl&eacute;mentation commerciale du
Lisp standard Allegro CL ne contient pas encore de support Unicode,
mais Erik Naggum y travaille.</p>
<h2><a name="ss5.4">5.4 Ada95</a></h2>
<p>Ada95 a &eacute;t&eacute; con&ccedil;u pour supporter Unicode,
et la biblioth&egrave;que standard Ada95 contient les types de
donn&eacute;es sp&eacute;ciaux ISO 10646-1 Wide_Character et
Wide_String, ainsi que de nombreuses proc&eacute;dures et fonctions
associ&eacute;es. Le compilateur Ada95 GNU (gnat-3.11 ou plus)
supporte UTF-8 comme encodage externe des caract&egrave;res 16
bits. Cela vous autorise &agrave; utiliser UTF-8 &agrave; la fois
dans le code source et dans les entr&eacute;es/sorties de
l'application. Pour l'activer dans l'application, utilisez "WCEM=8"
dans la cha&icirc;ne FORM quand vous ouvrez un fichier, et utilisez
l'option du compilateur "-gnatW8" si le code source est UTF-8. Pour
plus de d&eacute;tails, voyez les manuels de
r&eacute;f&eacute;rence GNAT et Ada95.</p>
</body>
</html>