首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LibXML xmlTextReaderReadString编码

LibXML xmlTextReaderReadString编码
EN

Stack Overflow用户
提问于 2019-01-04 06:56:49
回答 1查看 171关注 0票数 1

我正在读取一个用iso-8859-1编码的xml文档。这种编码也在documtent:<?xml version="1.0" encoding="ISO-8859-1"?>中进行了描述。

当我读取xml元素时,我得到的是utf-8编码的数据,但是我需要iso-8859-1进行进一步的处理。

我读取文件的代码如下所示:

代码语言:javascript
复制
xmlTextReaderPtr reader;
reader = xmlReaderForFile(sessionFileName, "iso-8859-1", 0);
if (reader != NULL)
{
    ret = xmlTextReaderRead(reader);

    while (ret == 1)
    {
        //only inspect start of elements
        if (xmlTextReaderNodeType(reader) != XML_READER_TYPE_ELEMENT)
        {
            ret = xmlTextReaderRead(reader);
            continue;
        }

        //getting node name
        elem_name = xmlTextReaderConstName(reader);

        //getting content of element (text or cdata)
        xmlChar *elem_value = xmlTextReaderReadString(reader);
    }
}

据我所知,http://xmlsoft.org/encoding.html在libxml2内部将所有数据存储在utf-8中,因此elem_value也是utf-8。如何在iso-8859-1中获得elem_value?我有手动转换吗?

这将是我的尝试:

代码语言:javascript
复制
        unsigned char *conv_value;

        if (elem_value)
        {
            int in_size = xmlStrlen(elem_value);
            int out_size  = in_size;

            conv_value = (unsigned char *)malloc((size_t)out_size + 1);

            if (UTF8Toisolat1(conv_value, &out_size, elem_value, &in_size) <= 0 ||
                (in_size - out_size) != 0)
            {
                //error while conversation
                free(conv_value);

                //take original value
                conv_value = elem_value;

                TRACE("error while converting, take utf-8 value");
            }
            else
            {
                conv_value[out_size] = 0; /* null terminating conv_value */
            }
        }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-01-04 18:46:28

您是正确的,您将需要手动将其从utf-8转换为iso-8859-1,然后将其从XML中提取出来。我知道,这实际上是“加倍工作”,因为它被转换了两次,最终返回到原来的编码,但是转换到UTF-8是libxml解析过程中不可或缺的一部分,没有办法告诉它不这样做。

好的一面是,如果您正在消费的内容突然更改为UTF-8或UTF-16或任何其他字符集,您的“从libxml获取它并隐藏到iso-8859-1”代码仍将正常工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54034343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档