12.5. Conjuntos de Caracteres

12.5.1. Suporte aos conjuntos de caracteres UTF-8 e byte-simples.

Zend_Search_Lucene foi projetado para trabalhar com conjuntos de caracteres UTF-8. Arquivos de índice armazenam dados unicode no formato de codificação "UTF-8 modificado" usado pelo Java. O núcleo do Zend_Search_Lucene suporta-os plenamente, com uma exceção: [6]

Em todo caso, tanto os analizadores de texto, quanto os interpretadores e processadores de consultas, utilizam a função ctype_alpha() para tokenizar os textos e as consultas. A função ctype_alpha() não suporta UTF-8 e sua substituição deve ser considerada em um futuro próximo.

Por enquanto, recomendamos a conversão dos dados para a representação ASCII. [7] (isso vale tanto para consultas, quanto para armazenagem de documentos fonte):

<?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);
?>


[6] Zend_Search_Lucene suporta somente os caracteres do Plano Multilingual Básico (BMP) (de 0x0000 a 0xFFFF), não suportando os caracteres suplementares (caracteres acima de 0xFFFF)

O Java 2 representa estes caracteres como um par de valores do tipo char (16 bits), o primeiro vem da faixa superior (0xD800-0xDBFF), o segundo, da faixa inferior (0xDC00-0xDFFF). Logo eles são codificados como caracteres usuais UTF-8 em seis bytes. A representação padrão UTF-8 utiliza quatro bytes para caracteres suplementares.

[7] Se os dados estiverem em formato UTF-8 ou, obrigatoriamente, contiverem caracteres inexistentes em ASCII.