[2/3] msxml3/domdoc: Add an internal function to load from a UTF8 string.
Adam Martinson
amartinson at codeweavers.com
Thu May 5 11:10:07 CDT 2011
On 05/05/2011 09:21 AM, Nikolay Sivov wrote:
> On 5/5/2011 18:09, Adam Martinson wrote:
>> On 05/04/2011 05:56 PM, Nikolay Sivov wrote:
>>> You don't need a separate helper for that. doparse() should do fine
>>> with "UTF-8" encoding parameter to force encoding.
>> This is to avoid calling domdoc_loadXML() from domdoc_load(). When
>> we need almost identical behavior from 2 separate interface functions
>> having a common internal function they both call makes sense to me...
> My point is that we already have doparse(This, str, len, "UTF-8");
> that does exactly what you need. Side effects like setting creating
> xmlDocNew(NULL) are handled later in ::load() too. Also ::loadXML()
> takes BSTR that's always UTF-16, and we don't do it right now - cause
> it's possible to avoid conversion it seems. Adding load_utf8 will mean
> we stick to the utf16 -> utf8 conversion in loadXML.
>
My logic for having this function:
domdoc_load() is basically a more flexible version of domdoc_loadXML()
that takes a VARIANT instead of a BSTR, and treats its input as a file
of some sort. But VT_ARRAY|VT_UI1 case is just a non-null-terminated
string, which is more like what domdoc_loadXML() does. To me it makes
sense to merge this case with the internal domdoc_loadXML() implementation.
I vaguely remember trying to avoid the conversion in domdoc_loadXML()
and just passing the BSTR to doparse() with encoding="UTF-16", and
running into some quirk in libxml... If memory serves it was that when
there's a <?xml encoding="foo"?> declaration in the string that doesn't
match the actual encoding, libxml had a fit if the actual encoding
wasn't UTF-8. eg, passing a UTF-16 string that contained <?xml
encoding="UTF-8"?> caused an error, but passing a UTF-8 string that
contained <?xml encoding="UTF-16"?> did not. It's been a while though,
it may be worth another look.
More information about the wine-devel
mailing list