>  기사  >  백엔드 개발  >  [XML] UTF8 및 GB2312 인코딩 변환에서 잘못된 문자에 대한 솔루션

[XML] UTF8 및 GB2312 인코딩 변환에서 잘못된 문자에 대한 솔루션

Y2J
Y2J원래의
2017-04-22 13:53:092426검색

검토된 정보는 XML 파일로 생성되어야 하며, XML은 GB2312로 인코딩되어야 합니다. 왜냐하면 수집된 뉴스 웹사이트 중 다수가 UTF8 인코딩을 사용하므로 변환 과정에서 문자가 깨질 수 있기 때문입니다.

I 최근에 작은 프로젝트를 진행하면서 이런 문제가 발생했을 때 요약해서 기록해두었습니다.
이 프로젝트는 뉴스 데이터 수집과 수집된 정보의 검토 두 부분으로 나누어 최종적으로 XML 파일을 생성합니다.
수집된 데이터를 사용자가 편집한 후에는 ACCESS 파일을 내보낸 다음 정보 검토 시스템으로 가져와야 합니다. ACCESS 라이브러리에 뉴스 정보를 저장하는 필드 유형은 ntext 유형인 반면, 감사 시스템 라이브러리의 해당 필드는 varchar(max) 유형입니다. 가져오기 후 일부 공백 문자가 깨져서 질문으로 나타나는 것으로 나타났습니다. 실제로, 후속 테스트 결과 공백(공백) 문자가 아닌 특수 문자인 것으로 나타났습니다. 어떻게 해야 합니까? 여러 테스트 후에 varchar(max) 유형을 nvarchar(max) 유형으로 변경해야 가져온 데이터에 더 이상 이러한 문제가 발생하지 않는 것으로 나타났습니다.
그러나 후속 테스트 과정에서 가져온 수집 정보를 변경한 후(.net 프로그램 편집 기능을 통해) 데이터베이스의 정보가 다시 왜곡된 것으로 조사 결과 삽입된 것으로 나타났습니다. 문은 이렇게 작성했습니다. 테이블 이름(뉴스) 값에 ​​​​(N'"+업데이트된 값+"")을 삽입하는 등 이런 종류의 문제는 발생하지 않습니다. 왜 N을 추가합니까? 바이두에 가보시면 이해하실 것입니다.
이제야 마음이 편해졌으나 다음과 같은 문제로 인해 우울해졌습니다...
검토된 정보는 수집된 뉴스 웹사이트가 많기 때문에 XML 형식으로 생성해야 합니다. UTF8 인코딩을 사용하므로 변환 과정에서 잘못된 문자가 나타납니다.(여전히 "공백" 특수 문자로 인해 발생합니다.) 어떻게 해야 합니까? 온라인 소개에 따르면 UTF8을 GB2312로 변환하는 것만으로도 충분하지만 실제로는 여전히 불가능합니다. 문제, 이 문제를 해결하기 위해 오전 내내 노력했지만 결국 방법이 없습니다. 우울할 때 갑자기 VS의 디버깅 기능을 사용하여 이 특수 문자가 무엇인지 알아보았습니다. 그리고 마지막으로 데이터베이스에서 이 필드의 값을 읽어낸 후 문자 배열로 변환한 후 content.ToCharArray()가 이를 하나씩 살펴보고 잘못된 코드를 발생시킨 문자가 ''임을 알아냈습니다. ' 따옴표 안의 공백에 주목하세요. 이것은 공백이 아니라 GB2312에서 인식할 수 없는 공백인데, 문득 이 문자의 값을 공백으로 대체할 수 있을까 하는 생각이 들었습니다. , 그리고 당연히 잘못된 코드 문제가 해결되었습니다. 이 말도 안 되는 일에 반나절을 낭비했습니다.
참고. 디버깅할 때 문자가 깨지는 실제 특수 문자이기 때문에 이를 사용해야 합니다. 다음과 같이

코드를 붙여넣습니다:

content = content.Replace(" ", " ");
.

위 내용은 [XML] UTF8 및 GB2312 인코딩 변환에서 잘못된 문자에 대한 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.