2009-09-17 7 views
1

필드 중 하나에 XML 문서가 포함 된 HTTP POST (x-www-form-urlencoded)의 수신 측에 있습니다. 그 문서를 받고, 몇 가지 요소를보고 데이터베이스에 저장해야합니다 (나중에 사용하기 위해). 문서는 UTF-8 형식이며 적절한 헤더가 있으며 많은 이상한 문자가 포함될 수 있습니다. 이 같은 MSXML/ASP에서 UTF-8 인코딩 된 XML 구문 분석

내가 데이터를 수신

: 나는 DOM 문서에서 팔 수

Set xmlDoc = CreateObject("MSXML2.DOMDocument.3.0") 
xmlDoc.async = False 
xmlDoc.loadXML(Request.Form("xml")) 

모든 UTF-8 형태로 아직도있다. 예를 들어,이 문서 (조잡한 간체) :

<?xml version="1.0"?> 
<data> 
ä 
</data> 

그것은 제거 : 나는 xmlDoc.XML 보면

<?xml version="1.0" encoding="UTF-8"?> 
<data> 
ä 
</data> 

항상

<?xml version="1.0" encoding="UTF-8"?> 
<data> 
ä 
</data> 

로 나오는,이 얻을 (VBScript에서 사용하는 어떤 문자열이든 "인코딩에 알 수없는"이 종류의 의미가 있습니다.)하지만 UTF-8로 인코딩 된 do를 나타내는 문자 시퀀스입니다. 기념물.

마치 MSXML이 헤더의 인코딩 정보를 신경 쓰지 않는 것과 같습니다. MSXML에 문제가 있습니까? 아니면 게시 데이터 인코딩과 관련이 있습니까? 이것은 첫 번째 UTF-8 (특정 문자가 여러 바이트로 쓰여지는 경우)과 바이트 단위로 URL 인코딩 된 경우 ("ä"는 실제로 % C3 % A4로 전송됩니다) 형식의 "이중 인코딩"형식입니다.

저는 항상 UTF-8이라고 가정하는 것과 같이 하드 코드를 사용하고 싶지 않습니다. (앞으로 언젠가는 UTF-16이 될 수도 있기 때문입니다.) 데이터에 키릴 문자와 아랍어 문자가 포함될 수 있으므로 다른 문자 세트 (예 : iso-8859-1)로 "하드 변환"을 수행 할 수 없습니다. 이 문제를 해결하려면 어떻게해야합니까?

답변

3

옵션 1

을 읽기 전에 어떤 양식 필드는 Response.CodePage 값을 수정 : -

Response.CodePage = 65001 

문제가 양식 데이터의 내용이 수신 페이지에서 이해되지이다 인코딩 된 UTF-8 수 있습니다. 따라서 % C3 % A4 데이터는 두 개의 다른 ANSI 문자로 간주됩니다. Response.CodePage 페이지는 클라이언트가 보낸 문자 집합 정보가없는 경우 양식 데이터가 어떻게 디코딩되는지에 이상하게 영향을줍니다. 2

옵션은 소스 페이지의 양식 요소를 수정합니다. 그것에에 다음 속성을 추가합니다 : -

<form accept-charset="UTF-8" ...> 

이 게시물의 문자의 UTF-8 인코딩을 적용하고 서버에게 그것을가 필요로하는 정보를 제공 선택한 캐릭터에 대한 데이터를 전송하는 게시물을 발생 데이터를 올바르게 디코딩하십시오. 3

옵션 마지막으로, 내 개인적인 취향은, 형태 필드 값으로 XML을 게시하지 않습니다.대신, 다른 양식 필드 값을 속성 또는 요소로 XML에 추가 한 다음 XmlHttpRequest을 사용하여 XML을 게시하여 주위를 돌리십시오. 탐색을 위해 서버는 게시 된 데이터에 대한 GUID 핸들을 포함하는 클라이언트가 탐색해야하는 URL을 반환해야 서버가 요청을 받으면 적절한 조치를 취할 수 있습니다. 그러나 나는이 작업이 모두 더 많은 작업을 수행한다는 것을 알고 있습니다.이 경우 다른 두 가지 옵션 중 하나가 효과가 있습니다.

0

옵션 3은 이러한 재 작성의 복잡성이 추가되어 현재로서는 거의 제외 될 수 있습니다.

옵션 1은 내게 이상한 것처럼 보입니다. 응답의 코드 페이지는 요청과 관련된 일을 지시해야하지만, 그렇다면 그대로 있도록하십시오.

옵션 2는 실제로는 브라우저 양식 게시가 아니지만 작은 스크립트 클라이언트 (CURL 사용)입니다. 그 결과로 생성 된 HTTP 헤더가 스크립트 요청에 추가 될 수 있습니까?

모두들 이것은 MSXML이 단순히 문자열에서로드 할 때 xml 헤더에 설정된 인코딩을 무시한다는 것을 의미합니다.

+0

@ionn : @jstck가있는 팀원이라면 조금 혼란 스럽습니까? 옵션 2의 경우 "Accept-Charset : UTF-8"헤더를 보내려는 요청 헤더에 추가해보십시오. 그러나 이것은 또한 실제로 필요한 __response__ charset이 무엇인지 명시하고 있기 때문에 조금 이상합니다. 나는 더 신뢰할 수있는 옵션 1을 찾는다. 저는 CURL을 모르지만 스크립팅 환경에서는 옵션 3이 바람직합니다. CURL은 다를 수 있습니다. – AnthonyWJones