XML 파싱에 expat을 사용하려고했지만 XML 파일에 러시아어 기호가 있습니다.이 기호는 expat에 의해 잘못 해석됩니다.러시아어 문자셋과 함께 expat-parser를 사용하는 방법은 무엇입니까?
나는 expired_str 가지고 : Р В РЎС "РЎРѓРЎРѓР С"Р С'Р в "- С‚РВμР С"СЃС‚
대신 :
static int xmlParseStartup(char *buffer, int n, START_UP_T *startUp_sp)
{
void *buff;
XML_Parser parser_p = XML_ParserCreate("UTF-8");
if (!parser_p)
{
DEBUG("Unable to create parser!\n");
return RES_ERR;
}
XML_SetUserData(parser_p, (void *)startUp_sp);
XML_SetElementHandler(parser_p, startElement, endElement);
buff = XML_GetBuffer(parser_p, n);
memcpy(buff, buffer, n);
if (XML_STATUS_ERROR == XML_ParseBuffer(parser_p, n, TRUE))
{
DEBUG("%s at line %" XML_FMT_INT_MOD "u\n",
XML_ErrorString(XML_GetErrorCode(parser_p)),
XML_GetCurrentLineNumber(parser_p));
return RES_ERR;
}
return RES_OK;
}
static void XMLCALL startElement(void *userData,
const char *name,
const char **atts)
{
int i;
START_UP_T *startUp_sp = (START_UP_T *)userData;
for (i = 0; i < startUp_sp->depthPtr; i++)
{
fprintf(stderr, ".");
}
DEBUG("[%d]name: %s\n", startUp_sp->depthPtr, name);
if (0 == strcmp(name, "response"))
{
if (0 == strcmp(atts[i], "result"))
{
startUp_sp->result = atoi(atts[3]);
DEBUG("RESULT: %d\n", startUp_sp->result);
}
else if (0 == strcmp(atts[i], "status_str"))
{
strcpy(startUp_sp->expired_str, atts[3]);
DEBUG("EXPIRED_STR: %s\n", startUp_sp->expired_str);
}
else if (0 == strcmp(atts[i], "status_width"))
{
startUp_sp->status_width = atoi(atts[3]);
}
}
startUp_sp->depthPtr += 1;
}
static void XMLCALL endElement(void *userData,
const char *name)
{
START_UP_T *startUp_sp = (START_UP_T *)userData;
startUp_sp->depthPtr -= 1;
}
: Русский 여기
을 Текст 내의 cutted 코드는
XML 파일 :
<?xml version="1.0" encoding="UTF-8"?>
<startup>
<response name="result" value="0"/>
<response name="status_str" value="Русский текст"/>
<response name="status_width" value="120"/>
</startup>
나는 XML 파일 엔코딩 : (ANSI as UTF-8) 여기 혼란 스럽다. nodepad ++를 사용한다. VS *에 의해 "UTF-8"로 저장된 main 함수를 가진 파일 * .c. 이제 XML 파일을 읽은 후 잘못된 결과가 나타납니다. " " –
* .c 파일의 변경 사항을 Windows-1251로 되돌립니다.), 같은 인코딩의 XML 파일. 또한 NULL 포인터를 사용하여 XML_ParserCreate 루틴을 호출합니다. 두 개의 표준 출력이 있습니다. 구문 분석하기 전에 : " ". 구문 분석 후 : "EXPIRED_STR : Р СѓСЃСЃРєРёР№ С,РμРєСЃС,". 그것을 고치는 방법? –
UTF-8로 ANSI는 "처음에는 유니 코드 마커가 없습니다"를 의미합니다. 유니 코드로 저장해야합니다. –