[Xapian-discuss] UTF-8 Corruption
Olly Betts
olly at survex.com
Tue Mar 18 03:56:58 GMT 2008
On Fri, Mar 14, 2008 at 11:14:56PM +0000, Colin Bell wrote:
> I was wondering if anyone every came across a problem I seem to be
> having. I'm indexing in text files using some basic code written in C+
> +. The text files may or may not be in UTF-8, ISO 8859-1 or possibly
> (but very rarely) even some other format - I have no way of knowing.
There are ways to detect the character set of a file, though not always
100% reliably.
> Question is, does Xapian convert none UTF-8 characters when it stores
> the document. I think I read that UTF-8 is the default encoding for
> Xapian, which is exactly what I am after.
Most of Xapian treats things as opaque data. The classes which need
to know are Xapian::Stem, Xapian::QueryParser, and
Xapian::TermGenerator. The UTF-8 parsing used by the latter two will
treat invalid sequences as if they were ISO-8859-1, which for
real-world examples will almost always do the right thing when fed
ISO-8859-1. Xapian::Stem uses Snowball's UTF-8 parsing code currently -
I'm not sure how that handles invalid sequences.
> The reason I'm asking is that I am getting some seriously corrupted
> characters in the index. When they are displayed on Tomcat I get a
> "sun.io.MalformedInputException" when trying to display the search
> results. I have set the pages charset to UTF-8 and apparently this
> error is thrown when when the streamreader detects characters that are
> not proper UTF-8 characters.
If you set document data, document values, or directly add terms (using
Document::add_posting() or Document::add_term()) then you'll get back
what you put in verbatim. So if you pass in something which is invalid
UTF-8, it will still be invalid.
If you pass data through Xapian::Utf8Iterator before doing anything with
it, then this will fix bad UTF-8. This is essentially what omindex
does to deal with this problem.
Cheers,
Olly
More information about the Xapian-discuss
mailing list