EVALUATION
The root of the problem is that contrary to intentions, the JRE "Lucida Sans"
font is being directed to the windows rasteriser in the case when its
the fallback font for a JDK logical font (eg monospaced).
This is apparent only on systems in which the windows registry font list
is missing mappings of the windows XP SP2 "Lucida Sans" fonts. I've seen this
happen because the XP SP2 install copies new fonts into \windows\fonts but
doesn't update the registry. This is clearly a windows installer, bug
but there is nonetheless a JDK problem here.
On systems which do have the Lucida font installed, the logical font
uses of the windows rasteriser, even though coming from the wrong
version of the font are mostly OK since its hard to see the difference.
On the systems which don't windows substitutes another font - in this
case Arial - and there is no way to find out from windows APIs what
font is really being used. It so happens that the character \u200b
has the glyphcode 1298 in the JRE's Lucida Sans Regular font, and
in Arial that's the glyphcode of \u0416 (Cyrillic capital Zhe with descender).
The advance used is however the correct zero-width advance, even though
the image is wrong, hence the over-printing with this image.
The fix needs to be a more certain way to ensure JRE fonts go through the Java
rasteriser.
|