You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@xerces.apache.org by James Berry <ja...@jberry.us> on 2004/02/28 21:46:12 UTC

Xerces Mac Users Feedback Requested

I'm requesting feedback from Xerces Mac users on a couple of points:

  (1) Whether the "local code page" encoding for Mac OS X should be 
UTF-8.

  (2) Feedback on a revised and simplified Mac OS Transcoder that now 
supports UTF-8
        as a local code page encoding.

Discussion of UTF-8 as local code page:

Xerces internally supports "Local Code Page" transcoders, whose purpose 
is to convert between the local encoding of a C-style character string 
and UTF-16, which Xerces uses internally. These "LCP" transcoders are 
called by Xerces whenever it is necessary to convert to or from a char 
string where the exact char encoding is not explicit.

For most practical purposes, that means that the LCP transcoder is used 
in construction of DOMStrings from C-strings, and in the construction 
of XMLStrings from C-strings. These cases are encountered in processing 
of Xerces sample command line arguments (like filenames), as well as 
any other cases where raw C strings are passed into Xerces.

Our traditional approach has been to set the LCP encoding to match the 
Mac system script encoding.

This approach, while traditionally the right answer under Mac OS, is a 
problem in Mac OS X when we're run from the terminal. Since the 
encoding of posix pathnames under Mac OS X is UTF-8, and since the 
unix-layer tools generally use parameters without any transcoding, the 
interface to command line tools is implicitly UTF-8. Not so 
coincidentally, the default character set encoding in the Mac OS 
Terminal program is also UTF-8.

But since the Xerces LCP encoding has been set to match the system 
script (and is thus MacRoman in western areas), parameters, including 
pathnames, that are passed in on the command line have had to be 
MacRoman. Thus one has had to encode pathnames to Xerces samples 
differently than for typical command line tools. This does not seem 
desirable. But note that it's also not "generally" a problem, as UTF-8 
is identical to MacRoman in the ASCII portion of its range, and maybe 
even beyond.

A change to UTF-8 as the LCP encoding for Xerces under Mac OS X brings 
usage of Xerces into line with other command line tools.

But note the downside of switching the LCP encoding to UTF-8: any 
application that has relied internally on the fact that char strings 
passed to Xerces can be be in the system script encoding, will begin to 
fail. Since most modern apps are written using unicode, and since 
Xerces provides a full unicode interface, I submit that this is 
probably not such a common occurrence, nor one that we should go 
overboard to propagate. But I'd like your feedback on this point.

As of my check-in today, and unless contrary feedback is received, the 
LCP encoding of Xerces on the Mac has been changed to UTF-8 if it's 
running on Mac OS X. The previous behavior can be restored by setting 
the define(XML_MACOS_LCP_TRADITIONAL).

In a real-world example of this change can cause things to break, note 
that the change described above causes samples built under CodeWarrior 
to fail if passed more obscurely encoded file names. Since the 
CodeWarrior samples use the ccommand interface to collect "command 
line" arguments through a dialog, and since this dialog collects the 
arguments using the system script, any characters outside the ASCII 
range will be misconstrued by Xerces as UTF-8. Exactly the opposite 
problem of what has been occurring from the terminal. This is either 
(a) an unfortunate occurrence, (b) an argument for why this switch in 
the LCP encoding shouldn't be implemented, or (c) a good reason to 
define(XML_MACOS_LCP_TRADITIONAL) for the CodeWarrior samples.


Changes to the Mac OS X Transcoder:

In order to enable the switchover to UTF-8 as the LCP encoding, I've 
revised the Mac OS Transcoder. Please watch for any problems that arise 
due to these code changes. Changes are these:

Revise the Mac OS Transcoder to use the Mac Text Encoding Converter, 
rather than the previously used Unicode Converter. The TEC allows 
transcoding between a broader variety of encoding formats, while the 
unicode converter converts only to and from Unicode (but not between 
unicode formats, such as UTF-8 <--> UTF-16).

  As part of re-implementing the transcoder, I've also simplified it:

    - I took out support for size mismatch between XMLCh and UniChar.
      This version assumes XMLCh will always be 16-bit UTF-16.

    - The LCP transcoder is now completely generic. It is implemented
      strictly in terms of the virtual transcoder interface. As such,
      any XMLTranscoder can be passed in as the transcoder to fullfill
      the LCP transcoding.

Additionally, since LCP transcoders are used globally, I've added a 
mutex that serializes use of the LCP transcoder such that it can be 
actively used in only one thread at a time. This may slow things down a 
bit, but it's correct, and note also that LCP transcoders aren't used 
too often in typical Xerces usage.


Your feedback on either of these issues is appreciated.

James.


---------------------------------------------------------------------
To unsubscribe, e-mail: xerces-c-dev-unsubscribe@xml.apache.org
For additional commands, e-mail: xerces-c-dev-help@xml.apache.org