[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAでXMLエンコードして出力』(凡人会社員)
<具体的なXMLデータを提供できず申し訳ございません>
以下のコードで出力するとなぜか最終行の「<Data>」の最終文字「>」が複製されて「<Data>>」になる。
この問題を解決したい。
原因は文字化けしたBOMスキップのMid部分にありそうで、
ここをコメントアウトすると複製されなくなる。
しかしその場合は不要な「・ソ」が冒頭についてしまう。
stream.WriteText XMLの直前のDebug.Printでは最終行は正常。
アドバイスやお助けを願います。
※試しに最終文字の「>」も削除してみたら「<Dataa>」になりました…
Sub XML_Exp()
Dim p_path As String
Dim XML As String
Dim stream As Object
p_path = "C\Desktop\output.xml"
ActiveWorkbook.XmlMaps("XMLマップ").Export URL:=p_path, Overwrite:=True
' ADODB.Streamオブジェクトを作成
Set stream = CreateObject("ADODB.Stream")
stream.Type = 2 ' テキストタイプ
stream.Charset = "utf-8" ' 元の文字コードを指定
stream.Open
stream.LoadFromFile p_path
' 文字コードをShift_JISに変換
stream.Charset = "shift-jis"
XML = stream.ReadText
' XML宣言行のエンコーディング属性を更新
XML = Replace(XML, "encoding=""UTF-8""", "encoding=""shift_jis""")
' 文字化けを修正
XML = Replace(XML, "縺ェ縺・", "なし<")
' BOMの2文字をスキップ(文字化け「・ソ」)
XML = Mid(XML, 3)
' Debug.Print XML
' 更新したXMLを再度保存
stream.Position = 0
stream.WriteText XML
stream.SaveToFile p_path, 2 ' 上書き保存
stream.Close
Set stream = Nothing
End Sub
< 使用 Excel:Microsoft365、使用 OS:Windows10 >
UTF-8でエンコードされたXML=>Shift_JISでエンコードされたXMLに変換するという事ですか? もし、そうなら理由を教えてください。 逆ならわかりますが、わざわざ文字化けの可能性があるのに、そうする理由が知りたいです。 (まる2021) 2024/02/09(金) 00:45:24
>' 文字コードをShift_JISに変換 > stream.Charset = "shift-jis" > XML = stream.ReadText これは、Shift-JISだとしてファイルを読んでいるので、 元のファイルがUTFだったら文字化けするのは当然だと思います。
UTFで読んで、Shift-JISで書き出す と言う処理にしないと。
読み込むStream(UTF)と書き出すStream(Shift-JIS)は別々に準備してください。
同じStreamに書き出していますが、 元々のファイルサイズより書き込むテキストのサイズが小さい場合に、 どうなるのか分かりません。(EOF:ファイルの終端はどこになるんでしょうね?) (´・ω・`) 2024/02/09(金) 08:53:23
<?xml version="1.0" encoding="shift_jis" standalone="yes"?>
<data1>
<data2>A</data2> </data1>
上記のような簡易なXMLでは該当症状は発生しませんでした。
おっしゃる通り読み込みと書き出しを一度分けてやってみます。
(凡人会社員) 2024/02/09(金) 09:08:45
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.