| 
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
日時: 2009/12/26 16:30
名前: 花ちゃん
 
************************************************************************************ カテゴリー:[ファイル入出力][文字列処理][]                                      *
 * キーワード:文字コード,DOMで,XML,UTF-8N,,                                       *
 ***********************************************************************************
 
 元質問:DOMでXMLをUTF-8Nで保存する方法 - くぅた  2005/06/21-16:28 No.1844
 
 現在、VB.NETでXML文書を読み込み、編集して保存するクライアントシステムを構築しようとしています。XMLは、DOMで操作しています。
 読み込み→編集→保存、まではうまくできたのですが、元のXMLファイルは文字コードがUTF-8のBOMなしで保存されており、(UTF-8Nというらしいんですが・・・)VBで変換して保存したものはBOMがついたUTF-8として保存されてしまいます。
 他のWebシステムで使うXMLファイルなので、BOM付きに変わってしまうとそのシステムでは読み込みができなくなってしまうようです。
 文字コードについて、Web上でいろいろと調べたのですが、UTF-8NでXML文書を保存する方法、またはUTF-8をUTF-8NにVBで変換する方法が見つからず、困っています。
 
 -----------------------------------------------------------------------------------
 Re: DOMでXMLをUTF-8Nで保存する.. - 魔界の仮面弁士  2005/06/21-20:48 No.1845
 -----------------------------------------------------------------------------------
 泥臭い方法しか思いつきませんでした……。
 もっとスマートな方法があるのかな。
 
 '---------------
 Dim UTF8Bin() As Byte
 
 '元になるXML
 Dim Doc As New Xml.XmlDocument()
 Doc.LoadXml("<?xml version='1.0' encoding='UTF-8'?><くぅた />")
 
 'バイト配列に取得
 Dim DocBin As New IO.MemoryStream()
 Doc.Save(DocBin)
 UTF8Bin = DocBin.ToArray()
 DocBin.Close()
 
 '先頭に UTF-8 のBOMが含まれているか確認
 Dim hasBOM As Boolean = True
 Dim BOM() As Byte = System.Text.Encoding.UTF8.GetPreamble()
 For Each B As Byte In BOM
 Dim P As Integer
 If UTF8Bin(P) <> B Then
 hasBOM = False
 Exit For
 Else
 P += 1
 End If
 Next
 
 'BOMが含まれていたら、取り除く
 If hasBOM Then
 Dim UTF8N(UTF8Bin.GetUpperBound(0) - BOM.Length) As Byte
 Array.Copy(UTF8Bin, BOM.Length, UTF8N, 0, UTF8N.Length)
 UTF8Bin = UTF8N
 Erase UTF8N
 End If
 
 '確認のため、ファイルに出力
 With New BinaryWriter(New FileStream("C:\UTF8.XML", FileMode.Create))
 .Write(UTF8Bin)
 .Close()
 End With
 
 --------------------------------------------------------------------------------
 ちょっと便利な検索ソフト(http://hanatyan.sakura.ne.jp/yybbs/read.cgi?no=117)
 を使って、キーワード【UTF-8N BOM】での検索結果(当サイト内・外の検索でも同じ)
 
 ヒット件数    検索対象サイト名    検索結果のURL(短く変換しています)
 8,200 件  ■ウェブ全体から検索       http://tinyurl.com/5kueka
 2 件  ★VBレスキュー(花ちゃん)   http://tinyurl.com/5twh4c
 2 件  Programing Library         http://tinyurl.com/5k8zfy
 1 件  わんくま同盟               http://tinyurl.com/67cbvw
 1 件  ●msdn.microsoft.com/      http://tinyurl.com/6odyda
 0 件  DOBON.NET
 --------------------------------------------------------------------------------
 
  |