- ベストアンサー
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);
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
外していると思いますが。。。HTMLのブラウザの文字設定をUnicodeにしても化けますか?
その他の回答 (1)
- MASATO3
- ベストアンサー率60% (27/45)
> これをSHIFT-JISで出力させたいのですが、いかがでしょうか? pHTMLDoc構築時に、 VARIANT_BOOL bSuccessful; pHTMLDoc->loadXML(L"<?xml version=\"1.0\" encoding=\"Shift_JIS\"?><html/>", &bSuccessful> という感じでShift_JISのXMLをロードするというのは如何でしょうか。
補足
ご回答ありがとうございます。 <HTML>要素は後から追加するようにしているので、頂いたソースの「<html/>」だけ削除してオブジェクト生成直後に記述したところ、出力される文字列に特に変化は見られませんでした。bSuccessfulが-1を返してきているのが何か関係しているのでしょうか…?
補足
ありがとうございます!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);