🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

5215閲覧

【VBA】xmlファイルのヘッダーから文字コードが省略されてしまう

tqqk

総合スコア2

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/01/18 05:16

編集2021/01/18 05:42

前提・実現したいこと

VBAを利用して、UTF-8のXMLファイル作成を試みています。

発生している問題・エラーメッセージ

MXXMLWriter60を利用して、

Encording= "UTF-8"

と書いているのですが
XMLファイルを出力するとヘッダーには

<?xml version="1.0" standalone="yes"?> 

と表示され、Encordingの表記が抜けてしまいます。
実際の文字コードはUTF-8になっているのですが、なぜか省略されて表示されてしまいます。

UTF-16に設定すると、省略されず正しく表示されます。

該当のソースコード

Sub Xmloutput()

'XML出力用の定義
Dim xmlDoc As MSXML2.DOMDocument60 'XMLドキュメント
Dim xmlDoc2 As New MSXML2.DOMDocument60
Dim rootNode As IXMLDOMNode 'root要素

'xmlオブジェクト
Dim XmlReader As New SAXXMLReader60
Dim XmlWriter As New MXXMLWriter60

XmlWriter.indent = True 'インデント設定

'XMLヘッダー情報
'XmlWriter.omitXMLDeclaration = False
XmlWriter.Encoding = "UTF-8" 'encodingをUTF8へ なぜか表示されない。
XmlWriter.standalone = True
XmlWriter.omitXMLDeclaration = False

Set xmlDoc = New MSXML2.DOMDocument60

Set rootNode = xmlDoc.appendChild(xmlDoc.createNode(NODE_ELEMENT, "test", ""))

Set XmlReader.contentHandler = XmlWriter ''ReaderとWriterを紐づける

XmlReader.Parse xmlDoc.XML '作成したXMLファイルをReaderで読み込む

'読み込んだデータをXMLファイルにいれる
xmlDoc.LoadXML XmlWriter.output

xmlDoc.Save ("test.xml")
End Sub

試したこと

ヘッダー情報を変更するために下記のコードを書いては見ましたが変更されませんでした。

'Set xmlPI = xmlDoc.appendChild(xmlDoc.createProcessingInstruction("xml", "version='1.0' encoding='UTF-8'"))

補足情報(FW/ツールのバージョンなど)

環境:Windows10
Excelバージョン:2019

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

utf-8がデフォルトなので省略するという方針で作られたソフトなのでしょう。
書いても書かなくても同じなので。

投稿2021/01/18 05:37

otn

総合スコア85888

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tqqk

2021/01/18 05:46

文字コードを指定している部分をコメントアウトして出力した場合、UTF-16で出力されました。 なのでデフォルトの設定はUTF-16になっていると思います。 仮に、UTF-8がデフォルトだった場合はどうにか出力させる方法はございますでしょうか?
otn

2021/01/18 06:07

いいえ。回答はそういう意味じゃ無いです。 「そのソフトのデフォルト」の話をしているのじゃ無くて、「XML文書のデフォルト」です。 BOM無しで、<?xml version="1.0" standalone="yes"?> と書かれていれば、 <?xml version="1.0" standalone="yes" encoding="UTF-8"?> と同じ意味なので、無意味な記述をしない仕様なんだろうという推測です。 UTF-16のBOM有りなら、encoding="UTF-16" と書いたのと同じ事ですが、これが省略されない理由との違いは分かりません。この出力の時、BOMは付いていますか?
tqqk

2021/01/18 06:42

UTF-8で出力した際は、BOM無し UTF-16で出力した際は、BOMあり です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問