[OSM-dev] strange Osmosis/XML/...? problem yesterday
Brett Henderson
brett at bretth.com
Sun Aug 16 08:57:21 BST 2009
Andy Allan wrote:
> On Fri, Aug 14, 2009 at 3:16 PM, Andy Allan<gravitystorm at gmail.com> wrote:
>
>> On Fri, Aug 14, 2009 at 12:54 PM, Frederik Ramm<frederik at remote.org> wrote:
>>
>>> Hi,
>>>
>>> Frederik Ramm wrote:
>>>
>>>> The result file should have been something like 400 bytes. This sounds
>>>> trivial but in the original case where the .osc contained a large number
>>>> of these characters, I suddenly had 2 MB of data in one tag.
>>>>
>>> I forgot to mention: I'm posting this here on dev and not on the osmosis
>>> list because it seems that other (at least Java) programs are also
>>> affected; someone fixed then node later with a commit comment of "JOSM
>>> says string too long" or so...
>>>
>> The code points for these gothic characters are fine. See the
>> following (awesome) site:
>>
>> http://decodeunicode.org/en/gothic
>>
>> A rough transliteration is HEJSPANOA. However, they lie outside the
>> Basic Multilingual Plane (BMP) and can't be represented by a 16bit
>> integer. Java stores characters internally as 16-bit UCS-2 characters
>> and so everything is going horribly wrong.
>>
>
> Installing an SMP-aware font shows what JOSM is doing more easily than
> reading Unicode code-points.
>
> http://code2000.net/code2001.htm
>
> I'll keep my (horrid) transliterations going here for the sake of everyone else.
>
> v31 - HEJSPANOA
> v32 - HHEHEJHEJSHEJSPHEJSPAHEJSPANHEJSPANOHEJSPANOA
>
> i.e. the first letter, the first two letters, the first three letters etc.
>
> I can see how you can quickly end up with a 2MB tag using this encoding scheme!
>
> Cheers,
> Andy
>
Thanks for all this. These unicode problems are the bane of my
existence :-) Any help is much appreciated.
I've run some experiments. I've been using the unicode character
0x10330 and experimenting with creating a test file then copying it via
osmosis. It seems that if I create a tag containing a single instance
of that character I can copy it okay. But when I create a tag with
multiple 0x10330 characters it starts to get duplicated.
If I create a tag with a single 0x10330 character it gets copied correctly.
If I surround the character with normal latin characters it copies
correctly.
If I put 2 0x10330 characters in the tag, 3 get written to the output.
If I put 3 0x10330 characters in the tag, 6 get written to the output.
If I make each 0x10330 character non-consecutive by surrounding them
with latin characters they still get duplicated.
I've run this under a debugger and it seems that the data gets
duplicated during input, not output. My ElementWriter class may have
some issues with surrogate pairs, but it appears that it isn't the
source of this problem.
I've opened the file directly using a UTF-8 input stream under a
debugger and the characters are read in correctly there as well.
I've tried using the osmosis --fast-read-xml-0.6 task and the problem
goes away. This alternative XML reading task uses the Woodstox StAX XML
parser.
So to summarise it seems like the standard Java XML parser (based on
Apache Xerces I believe) is somehow introducing surrogate pair
duplication when multiple surrogate pairs are involved. I don't know if
this is a bug or a problem in how we're using it. I'm always hesitant
to assume bugs in the Java runtime but it seems like there might be one
here.
Options:
1. Try to find the source of the problem in the Java XML parser or our
use of it.
2. Switch over to the Woodstox StAX XML parser which isn't exhibiting
the problem.
Given that Woodstox StAX parsing gives an approx 20% performance
improvement, it might be a good time to implement option 2.
Brett
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstreetmap.org/pipermail/dev/attachments/20090816/8acb1108/attachment.html>
More information about the dev
mailing list