エンコード

XmlLite がサポートするエンコード

このエントリーをはてなブックマークに追加
最終更新日 2016-12-31

XmlLite は、XML を読み込む際に次のような XML 宣言からエンコードを識別します。

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

しかしながら、CreateXmlReaderInputWithEncodingName() を使用するとプログラム内でエンコードを指定して XML を読み込むことができます。

CComPtr<IXmlReaderInput> pInput;
CreateXmlReaderInputWithEncodingName(pStream, NULL, L"UTF-16", FALSE, NULL, &pInput);

また、CreateXmlWriterOutputWithEncodingName() を使用するとプログラム内でエンコードを指定して XML を書き込むことができます。

CComPtr<IXmlWriterOutput> pOutput;
CreateXmlWriterOutputWithEncodingName(pStream, NULL, L"UTF-16", &pOutput);

次に示すのは、XmlLite がネイティブでサポートするエンコードです。

上記以外のエンコードを使用する場合は、まず、CoCreateInstance() を呼び出して IMultiLanguage2 のインスタンスを作成します。 次に、読み込む場合と書き込む場合でそれぞれ次のようにプロパティを設定します。

// 読み込む場合
CComPtr<IMultiLanguage2> pMlang;
pMlang.CoCreateInstance(CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER);

pReader->SetProperty(XmlReaderProperty_MultiLanguage, reinterpret_cast<LONG_PTR>pMlang.p);
// 書き込む場合
CComPtr<IMultiLanguage2> pMlang;
pMlang.CoCreateInstance(CLSID_CMultiLanguage, NULL, CLSCTX_INPROC_SERVER);

pWriter->SetProperty(XmlWriterProperty_MultiLanguage, reinterpret_cast<LONG_PTR>pMlang.p);

これで Shift_JIS や EUC-JP のような他のエンコードを処理できるようになります。