- 日時: 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 --------------------------------------------------------------------------------
|