我使用libxml来解析xml响应。我发现libxml通过读取xml文件头来检测编码。但是我找不到如何获得检测到的编码。我做了以下操作来获取libxml以检测编码:
xmlCreatePushParserCtxt(&simpleSAXHandlerStruct, (__bridge void *)(self), [data bytes], [data length], NULL);
我遇到了
xmlDetectCharEncoding(const unsigned char * in, int len)
返回检测到的编码,但不是来自xml文件的第一行。
有什么想法吗?
答案 0 :(得分:1)
解析文档后,您可以在xmlDoc
struct的encoding
位置找到编码。
编辑:如果您使用推送解析器和自己的SAX处理程序,则不会构建xmlDoc
。在这种情况下,您可以从xmlParserCtxtPtr
通过ctxt->encoding
(或者ctxt->input->encoding
)获取编码,但只能在解析XML声明之后。这意味着您必须至少调用xmlParseChunk
一次,并确保已将足够的数据提供给推送解析器。