내가 예를 들어, 서버에서 일부 XML을 수신 한 후 일부 콤보 박스를 채우기 위해 그것을 구문 분석을 시도하는 C++ 프로그램을 가지고있다가 문자TinyXML 멀티 바이트 문자를 구문 분석하지만, 건너 뛰는 다음 [X]
<?xml version="1.0"?>
<CustomersMachines>
<Customer name="bob" id="1">
<Machine name="office1" id="1" />
<Machine name="officeserver" id="2" />
</Customer>
</CustomersMachines>
이러한 값의 경우 TinyXML은 정밀하게 파싱하고 결과로 생성되는 콤보 상자가 의도 한대로 채워집니다. 이 문제는 멀티 바이트 문자가 name 요소의 끝에 (또는 몇 바이트에 따라) 위치 할 때 발생합니다. 콤보 상자가 발생합니다
<Customer name="boß" id="3">
은 내가 볼 디버거를 단계별로부터
= 값 보스 "ID로 채워지는 그 멀티 바이트 문자)는 (READTEXT에 전달되는 경우 1 ~ 3 바이트의 1 바이트 문자를 건너 뛰면 자동으로 포함되므로 tinyXML은 닫는 따옴표를 등록하지 않고 다음에 도달 할 때까지 구문 분석을 계속합니다 .xml을 보내는 서버에서 실행되는 응용 프로그램은 ISO- 8859-1 인코딩 인 반면 tinyXML은 UTF-8을 기본값으로 사용합니다.
나는 TIXML_ENCODING_UNKNOWN을 사용하여 문제를 해결하는 것처럼 보이도록 tinyxml을 조정 해 보았지만 프로그램의 다른 곳에서 상당한 수의 문제가 발생했습니다. 내가 시도한 다른 것들은 그것을 보내기 전에 xml 서버 측 utf8_encode하는 것이지만 (이것은 멀티 바이트 char이 있어야하는 콤보 상자에 이상한 문자가 표시되는 원인이된다.) XML로 보내지는 인코딩을 강제로 클라이언트 프로그램을 사용할 수 없습니다.
이 경우 멀티 바이트 문자가 다음 1-3자를 자동으로 무시하는 것을 방지하는 방법에 대한 의견이 있으십니까?
저장된 파일은 어떤 인코딩입니까? –
실제로는 파일로 저장되지 않습니다. 서버가 그것을 생성하여 클라이언트에게 스트리밍합니다. – user2174599