cpp_learners 2021-12-23 19:26 采纳率: 0%
浏览 35
已结题

mini-xml如何支持解析中文?

最近在研究mini-xml,使用C语言 和 mini-xml 去生成和解析xml。
但是生成的xml可以有中文,解析却解析不了中文,不知道该怎么解决!
例如从文件读取已经写好的xml文件,想去初始化根时,初始化失败,就因为是有中文在里面,如果没有中文就可以初始化成功!


void parse_XML() {
    FILE *fp;
    errno_t err = fopen_s(&fp, FILE_NAME, "r");    // 只读方式打开文件
    if (err != 0) {
        printf("文件打开失败!\n");
        return;
    }


    char strXML[1024] = { 0 };
    // 读取文件中的内容
    int size = fread(strXML, sizeof(char), sizeof(strXML) / sizeof(strXML[0]), fp);
    if (size == 0) {
        printf("读取文件内容失败!\n");
        return;
    }
    fclose(fp);



    // 载入一个xml字符串到一个XML节点树(返回值:第一个节点或者NULL代表字符串中有错误)
    mxml_node_t *xml = mxmlLoadString(NULL, strXML, MXML_OPAQUE_CALLBACK);  /*************就在这里初始化返回NULL********************/
    if (xml == NULL) {
        printf("xml字符串错误!\n");
        return;
    }


    //mxml_node_t *xml = mxmlLoadFile(NULL, fp, MXML_OPAQUE_CALLBACK);
    //if (xml == NULL) {
    //    printf("xml字符串错误!\n");
    //    return;
    //}


    // 将xml转换为字符串
    char *string = mxmlSaveAllocString(xml, MXML_NO_CALLBACK);
    printf("%s\n", string);
    free(string);


    // 找到<Book>子节点
    mxml_node_t *Book = mxmlFindElement(xml, NULL, NULL, NULL, "Book", MXML_DESCEND);
    if (Book == NULL) {
        printf("没有找到Book子节点!\n");
        return;
    }
    printf("Book = %s\n", mxmlGetElement(Book));







}

读取的xml:

img

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月31日
    • 创建了问题 12月23日