Xerces-C++ 로 한글 xml 처리하기

linuxqna의 이미지

먼저 제 상황을 설명드리겠습니다.
문자데이터 부분이 한글로 된 XML 파일을 파싱해서,
이 데이터 부분을 찍어내는 간단한 프로그램입니다.

일단 Xerces API가 euc-kr 을 direct로 처리 못한다고해서
문서를 UTF-8로 인코딩한후에
파싱한후 출력단에서 iconv() 로 다시 UTF-8 --> EUC-KR 변환을 해서 출력할라고 합니다.

그런데 문제는
DOMString.transcode()로 char* 문자열을 얻어내는데
문자열이 제대로 안들어오는것 같아요 당연히 iconv()로 변환해도
이상한 문자들만 나오고

transcode()에서 뭔가 변환이 잘못되고 있는것 같기도 하고
아무튼 Xerces로 한글처리에대한 경험있으신분의 조언 부탁드립니다.

linuxqna의 이미지

XMLPlatformUtils::fgTransService->makeNewTranscoderFor()

함수로 transcode() 의 인코딩변경방식을 지정해 놓으니
잘됩니다.

감사합니다.

sore의 이미지

저 역시도 XMLPlatformUtilsfgTransService->makeNewTranscoderFor() 를 이용해서 인코딩 방식을 지정했음에도 불구하고 char * 에 있는 문자열이 DOMString 이나 XMLString 으로 변환되지를 않더군요...

혹시나 하여 질문 올립니다..

iconv 사용법도 찾아보긴 했습니다만..
파일에서 char * 로 모두 읽어들여서 iconv 로 변환한 결과를
DOMString 에 줘야 하는건가요...

잘 못 찾고 있는건지 원. -_-;

char * 는 이상한 문자도 잘 읽더군요. 그렇다면 C에서 iconv를 사용하는 이유는 무엇인가요? 다른 포맷의 결과 파일을 만들어 낼 때 사용하는건가...

아.. 복잡합니다... ㅠ.ㅠ

madkoala의 이미지

xml 파일의 encoding을 "windows-1252"로 하면
제대로 읽더군요.

<?xml version="1.0" encoding="Windows-1252"?>

이렇게 하면 한글 데이터가 인터넷 익스플로러에서는 깨지지만 xerces에서는 제대로 읽어들입니다.

<?xml version="1.0" encoding="Windows-1252" standalone="no" ?>
<Configurations>
        <ApplicationVersion>0.9.10</ApplicationVersion>
        <TaskConfigurations>
                <ControlServerPort>7710</ControlServerPort>
                <UseSecureChannel>FALSE</UseSecureChannel>
        </TaskConfigurations>

        <KoreanSupportTest>이거 한글 지원하나요?</KoreanSupportTest>
</Configurations>
madkoala의 이미지

.. 테스트해보니.. euc-kr도 잘 되고 utf-8도 잘 되는군요 -_-aaa

hey의 이미지

오래된 질문인데 답을 얻지 못해서 다시 올립니다. :]

이 쓰레드를 보고 XMLPlatformUtils::fgTransService->makeNewTranscoderFor() 함수를 들여다봤는데, 위의 포스트처럼 XMLString::transcode()의 작동 방식을 고치는게 아니라 새로운 트랜스코더를 얻어서 그 트랜스코더를 이용해서 transcodeTo(), transcodeFrom()을 하는 형식이더군요.

그렇다면 transcode()가 소용이 없지 않습니까? transcode()가 내부에서 사용하는 gTranscoder를 바꿔야 제가 원하는 동작이 가능할 것 같은데 그 변수는 내부 변수고 .. 답을 알고싶네요.


----------------------------
May the F/OSS be with you..


댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.