2009-06-24 2 views
4

다음 XML 코드가 있습니다.왜 내 XML이 깨지나요?

<firstname> 
<default length="6">Örwin</default> 
<short>Örwin</short> 
<shorter>Örwin</shorter> 
<shortest>�.</shortest> 
</firstname> 

"가장 짧은"노드의 내용이 중단되는 이유는 무엇입니까? 그것은 지루한 instead 대신에 단순한 "Ö"이어야합니다. XML은 UTF-8로 인코딩되며 해당 노드의 출력을 처리하는 함수는 "short"및 "short"의 내용도 씁니다. "Ö"가 명확하게 보이는 곳.

+0

http://www.w3schools.com/XML/xml_cdata.asp 어쩌면 문제는 내가 하나의 "O"와 얻는 방법이다. firstname {0}을 사용하여 firstname의 첫 번째 문자를 추출합니다. UTF-8 문자열을 사용할 때 문제가 있습니까? – individual8

+2

내 PHP 스크립트에서 잘못된 내부 인코딩을 사용한 것 같습니다. firstname의 첫 번째 문자를 가져 오기 위해 mb_substr ($ firstname, 0,1, 'UTF-8')으로 변경하면 작동합니다. – individual8

답변

17

내 생각 엔 XML이 이 아니며 적절하게 UTF-8로 인코딩되어 있습니다. 원시 파일의 <shortest> 요소 내에 바이트을 표시하십시오 ... 유효하게 인코딩 된 문자가 아닌 것으로 판단됩니다. 이 XML을 유효한 입력으로부터 생성하는 짧지 만 완전한 프로그램을 보여줄 수 있다면 매우 유용 할 것입니다. (가급적이면 어떤 플랫폼 인지도 알려주십시오.)

EDIT :이 파일에서 뭔가 이상한 일이 벌어지고 있습니다. 여기에 16 진수 값은 "짧은"및 "짧은"값이다 :

짧다 C3 96 72 77 69 63

최단 : EF BF BD 2E는

이제 "C3 (96)의"유효 원하는대로 "분음 기호가있는 라틴어 대문자 O"인 U + 00D6에 대한 UTF-8 인코딩.

그러나 EF BF BD는 "대체 문자"인 U + FFFD에 대한 UTF-8 인코딩입니다. 확실히 이 아닙니다. 원하는 것을 선택하십시오. (2E는 ASCII 점입니다.)

그래서 실제로 유효한 UTF-8이지만 원하는 문자는 포함되어 있지 않습니다. 다시 말하지만 파일을 생성 한 내용을 조사해야합니다.

+1

학교에서 타이핑 수업을 받았습니까? :) – kemiller2002

+1

당신은 toooooooooooooo 빨리 – rahul

+0

안녕 존, 파일 (파이어 폭스에서 저장) : http://clipboard.i8network.de/ged2xml.xml XML은 리눅스 환경에서 PHP의 SimpleXML에 의해 생성됩니다. – individual8

-3

XML은 중첩 요소를 포함 할 수 있으므로 태그 내부의 요소를 구문 분석합니다. 따라서 "ö"는 구문 분석을 중단시킬 수 있습니다.

은 CDATA 태그, 예를 들어 내부에 데이터를 넣어 :

+0

나는 이미 그것을 생각했다. 그런데 왜 다른 움라우트가 깨지지 않았습니까? – individual8