<div dir="ltr"><div>Dear list,</div><div><br></div><div><br></div><div>I've got a problem with unicode & xmerl library.</div><div><br></div><div>Input data for xmerl is utf-8 encoded xml, and what I've got as the result is encoded latin1. But I need utf8!</div><div><br></div><div><br></div><div>EXAMPLES</div><div><br></div><div>Body = <<"<?xml version=\"1.0\" encoding=\"UTF-8\"?><response><value>René</value></response>"/utf8>>.</div><div><br></div><div>(for the sake of portability here is term_to_binary(Body): </div><div><br></div><div><<131,109,0,0,0,79,60,63,120,109,108,32,118,101,114,115,</div><div>  105,111,110,61,34,49,46,48,34,32,101,110,99,111,100,105,</div><div>  110,103,61,34,85,84,70,45,56,34,63,62,60,114,101,115,</div><div>  112,111,110,115,101,62,60,118,97,108,117,101,62,82,101,</div><div>  110,195,169,60,47,118,97,108,117,101,62,60,47,114,101,</div><div>  115,112,111,110,115,101,62>></div><div><br></div><div><br></div><div><br></div><div>(1):</div><div><br></div><div>When I do </div><div><br></div><div>xmerl_scan:string(binary_to_list(Body)).</div><div><br></div><div>it returns </div><div><br></div><div>{#xmlElement{name = response,expanded_name = response,</div><div>             nsinfo = [],</div><div>             namespace = #xmlNamespace{default = [],nodes = []},</div><div>             parents = [],pos = 1,attributes = [],</div><div>             content = [#xmlElement{name = value,expanded_name = value,</div><div>                                    nsinfo = [],</div><div>                                    namespace = #xmlNamespace{default = [],nodes = []},</div><div>                                    parents = [{response,1}],</div><div>                                    pos = 1,attributes = [],</div><div>                                    content = [#xmlText{parents = [{value,1},{response,1}],</div><div>                                                        pos = 1,language = [],</div><div><br></div><div><br></div><div>                                                        value = "René",</div><div><br></div><div><br></div><div>                                                        type = text}],</div><div>                                    language = [],xmlbase = "/Users/aturkin/ws/",</div><div>                                    elementdef = undeclared}],</div><div>             language = [],xmlbase = "/Users/aturkin/ws/",</div><div>             elementdef = undeclared},</div><div> []}</div><div><br></div><div><br></div><div>So, note there is `value = "René"` string, and it uses [233] symbol, which is latin1.</div><div><br></div><div><br></div><div><br></div><div><br></div><div>(2):</div><div><br></div><div>xmerl_scan:string(xmerl_ucs:to_utf8(binary_to_list(Body)))</div><div><br></div><div>returns </div><div><br></div><div>{#xmlElement{name = response,expanded_name = response,</div><div>             nsinfo = [],</div><div>             namespace = #xmlNamespace{default = [],nodes = []},</div><div>             parents = [],pos = 1,attributes = [],</div><div>             content = [#xmlElement{name = value,expanded_name = value,</div><div>                                    nsinfo = [],</div><div>                                    namespace = #xmlNamespace{default = [],nodes = []},</div><div>                                    parents = [{response,1}],</div><div>                                    pos = 1,attributes = [],</div><div>                                    content = [#xmlText{parents = [{value,1},{response,1}],</div><div>                                                        pos = 1,language = [],</div><div><br></div><div><br></div><div>                                                        value = "René",</div><div><br></div><div><br></div><div>                                                        type = text}],</div><div>                                    language = [],xmlbase = "/Users/aturkin/ws/",</div><div>                                    elementdef = undeclared}],</div><div>             language = [],xmlbase = "/Users/aturkin/ws/",</div><div>             elementdef = undeclared},</div><div> []}</div><div><br></div><div>Now `value = "René"`, so 2 bytes are used to code this symbol, and this is utf-8.</div><div><br></div><div>So in (2) I get what I need, but why I need to force that conversion for xmerl? </div><div><br></div><div><br></div><div><br></div><div><br></div><div>QUESTIONS</div><div><br></div><div>1. I don't understand why xmerl_scan allows you to set input encoding, but it looks like there is no way to set output encoding. Is there any way to make xmerl_scan to return utf8 instead of latin1?</div><div><br></div><div>2. How is that happen, that in (1) it does conversion utf-8 -> latin1, and in (2) it's utf-8?</div><div><br></div><div><br></div><div><br></div><div><br></div>-- <br><div class="gmail_signature">Best Regards,<div>Alex Turkin</div></div>
</div>