• ベストアンサー

createTextNode実行後の文字化けについて

こんにちは。現在、XMLファイルをC++で変換し、HTMLファイルを生成するプログラムを作成しています。(2)のソースから(1)の関数を呼んで文字列の変換を行った後、テキスト要素の作成、追加を行っていますが、「全角文字列」という文字列が「蜈ィ隗呈枚蟄怜・」と出力されてしまいます。解決方法についてご教示願います。 (1)BSTR AsciiToBSTR(const char* ascstr)  {   WCHAR wszURL[MAX_PATH];   ::MultiByteToWideChar(CP_ACP, 0, ascstr, -1, wszURL, MAX_PATH);   return SysAllocString(wszURL);  } (2)  IXMLDOMDocument* pHTMLDoc  IXMLDOMNode * pNewNode;  BSTR bstrText;  bstrText = AsciiToBSTR("全角文字列");  pDoc->createTextNode(bstrText, &pNewNode);  pHTMLDoc->appendChild(pNewNode, NULL);

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

外していると思いますが。。。HTMLのブラウザの文字設定をUnicodeにしても化けますか?

domagoo
質問者

補足

ありがとうございます!Unicodeで表示してみると、意図した文字列が表示されました。 SHIFT-JISで出力させていたつもりが、Unicodeで出力されていたということが分かりました。 今Unicodeで出力されているようですが、これをSHIFT-JISで出力させたいのですが、いかがでしょうか?ちなみにオブジェクト作成箇所は(1)、ファイル出力箇所は(2)のようなソースになっています。 (1) IXMLDOMDocument* pHTMLDoc=NULL; CoCreateInstance(CLSID_DOMDocument, NULL, CLSCTX_INPROC_SERVER, IID_IXMLDOMDocument, (void**)&pHTMLDoc); (2) VARIANT vName; vName.vt = VT_BSTR; V_BSTR(&vName) = pBFilePath;//pBFilePathは出力ファイルパス return pHTMLDoc->save(vName);

その他の回答 (1)

  • MASATO3
  • ベストアンサー率60% (27/45)
回答No.2

> これをSHIFT-JISで出力させたいのですが、いかがでしょうか? pHTMLDoc構築時に、 VARIANT_BOOL bSuccessful; pHTMLDoc->loadXML(L"<?xml version=\"1.0\" encoding=\"Shift_JIS\"?><html/>", &bSuccessful> という感じでShift_JISのXMLをロードするというのは如何でしょうか。

domagoo
質問者

補足

ご回答ありがとうございます。 <HTML>要素は後から追加するようにしているので、頂いたソースの「<html/>」だけ削除してオブジェクト生成直後に記述したところ、出力される文字列に特に変化は見られませんでした。bSuccessfulが-1を返してきているのが何か関係しているのでしょうか…?