12.5. Jeux de caractères.

12.5.1. Support d'UTF-8 et de jeux de caractères sur un octet.

Zend_Search_Lucene est créée pour fonctionnet avec UTF-8. Les fichier d'index stockent des données unicode en JAVA "modified UTF-8 encoding". Le coeur de Zend_Search_Lucene le supporte complètement, à une exception près: [7]

Cependant, les analyseurs de texte, et le parseur de requête utilisent ctype_alpha() pour tokeniser le texte et les requêtes. ctype_alpha() ne supporte pas l'UTF-8 et devra être remplacé par quelque chose d'autre dans un future proche.

Avant d'être fortement encouragé à convertir vos données en ASCII [8] (pour stocker les documents source, et pour effectuer des requêtes) :

<?php
$doc = new Zend_Search_Lucene_Document();
...
$docText = iconv('ISO-8859-1', 'ASCII//TRANSLIT', $docText);
$doc->addField(Zend_Search_Lucene_Field::UnStored('contents', $docText));

...

$query = iconv('', 'ASCII//TRANSLIT', $query);
$hits = $index->find($query);
?>


[7] Zend_Search_Lucene ne supporte uniquement que les caractères BMP (Basic Multilingual Plane) (de 0x0000 à 0xFFFF) et ne supporte pas les "caractères supplémentaires" (les caractères dont le code est supérieur à 0xFFFF).

Java 2 représente ces caractères comme une paire de valeurs de type char (16-bit), en premier la gamme des hauts-substituts (0xD800-0xDBFF), en deuxième la game des bas-substituts (0xDC00-0xDFFF). Ensuite tout est encodé comme des caractères UTF-8 habituels dans six octets. La représentation standard d'UTF-8 utilise quatre octets pour les caractères supplémentaires.

[8] Si les données contiennent des caractères non-ascii ou arrivent en UTF-8