UTF-8に設定したい。ファイルの文字コード変更方法を教えてください。

このQ&Aのポイント
  • XMLファイルとスタイルシート(.xslt)を使用して新しいファイルを作成するコードがあります。現在、CreateTextFileメソッドで作成されるファイルの文字コードはUnicodeです。UTF-8に変更する方法はありますか?
  • 初心者レベルで、UTF-8に設定する方法を知りたいです。現在はUnicodeで出力されています。
  • XMLファイルとスタイルシートを使用して新しいファイルを作成するコードがありますが、作成されるファイルの文字コードをUTF-8に変更したいです。方法を教えてください。
回答を見る
  • ベストアンサー

UTF-8に設定したい。

よろしくお願いします。 *-----------------------------------------* function convert( XMLParam, XSLTParam, destParam ) { objData=new ActiveXObject("Msxml2.DOMDocument"); objData.async = false; objData.load(XMLParam); objStyle=new ActiveXObject("Msxml2.DOMDocument"); objStyle.async = false; objStyle.load(XSLTParam); (objData.transformNode(objStyle)); fso=WScript.CreateObject("Scripting.FileSystemObject"); fl = fso.CreateTextFile(destParam,true,true); fl.Write(objData.transformNode( objStyle )); fl.Close(); } *---------------------------------------- というコードがありまして、 XMLファイルとスタイルシート(.xslt)を用いて 新しくファイルを作成しています。 CreateTextFile作成されるそのファイルの文字コードをUTF-8のファイルにしたいのですが、技術的に可能なのでしょうか。 現在はUnicodeで出力しています。 また、どのようにすれば可能でしょうか。 当方、前担当者よりソースを受け取ったのみで初心者同様のため、検討がつきません。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.7

>これは.NETでXMLとXSLTを使用してtxtファイルをはき出すプログラムを作成するということでしょうか? そうです。 .NET Framworkが使えれば JScript.NETが使えます。 そうすると、.NETのライブラリが使えて、jsファイルをコンパイルして実行可能ファイル(EXE)を作成できます。 例えば、 conv.jsという名前で以下の部分を作成したとします。 //-------------------------------------------------------------- import System; import System.IO; import System.Text; function convert( XMLParam, XSLTParam, destParam ){ var objData=new ActiveXObject("Msxml2.DOMDocument"); objData.async = false; objData.load(XMLParam); var objStyle=new ActiveXObject("Msxml2.DOMDocument"); objStyle.async = false; objStyle.load(XSLTParam); var Fs : FileStream = new FileStream(destParam, FileMode.Create, FileAccess.Write, FileShare.None); var fswUTF8 : StreamWriter = new StreamWriter(Fs, System.Text.Encoding.UTF8); fswUTF8.WriteLine(objData.transformNode( objStyle)); fswUTF8.Close(); } convert("test.xml","test.xsl","utf8.txt"); //------------------------------------------------------------- これは、test.xmlにtest.xslを適用したモノをUTF-8文字コードをつかって、utf8.txtという名前で、出力します。 コマンドプロンプトから jsc conv.js でそのままコンパイルできて、conv.exeができたら、 conv.exeを実行できます。 >拡張子.jsのファイルを.NETFrameworkを参照して作成するということ。。? エディタがあれば作成できます。jsファイルはただのテキストですので。 環境として.NETFrameworkがインストールされている必要があるということです。

kiraritto_hikaru
質問者

お礼

ご回答ありがとうございます。 サンプルコードまで記述いただき、とても参考になりました。 なんとかUTF8で出力できるようになりました。 今回のことでJScript.NETというものの存在を初めて知りました。 (恥ずかしい話です。。) 今後チョコチョコ勉強していきたいと思います。 ありがとうございました。

その他の回答 (6)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.6

>.NET2003 が入っているなら import System; import System.IO; import System.Text; var Fs : FileStream = new FileStream(destParam, FileMode.Create, FileAccess.Write, FileShare.None); var fswUTF8 : StreamWriter = new StreamWriter(Fs, System.Text.Encoding.UTF8); fswUTF8.Write(objData.transformNode( objStyle )); fswUTF8.Close(); って感じでUTF8出力できます。 ファイルがconv.jsだったら jsc conv.js としてコンパイルして下さい。

kiraritto_hikaru
質問者

お礼

ご回答ありがとうございます。 すみません。 少し理解が追い付かないのですが、 これは.NETでXMLとXSLTを使用してtxtファイルをはき出すプログラムを作成するということでしょうか? 拡張子.jsのファイルを.NETFrameworkを参照して作成するということ。。? ですよね。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

>出力されなくなりました。。 すみません、なんだか、XSLをXML→XMLだと思い込んでいました。 出力が普通のテキストなら transformNodeでの変換結果を loadXMLで読込したら中身が無くなるのは当たり前ですね。m(_ _)m saveもできるわけないです。 通常のMSXMLとJScriptの範囲ではできないですね。 反ってお手数掛けさせてすみません。<(_ _)> ところで、.NET Frameworkはインストールされていますでしょうか? もしそうなら、.NET Frameworkのライブラリを使ってUTF-8出力できるかもしれません。

kiraritto_hikaru
質問者

お礼

ご回答ありがとうございます。 私の説明不足でこちらこそお手数をおかけしました。 自宅のPCには.NETはインストール済みなのですが、 一応会社のマシンの.NET2003であわせたいので、 また明日会社でいろいろやってみます。 ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

>いまいちよくわからないので・ スタイルシートで、 <xsl:output method="xml" omit-xml-declaration="yes" encoding="UTF-8" indent="yes" version="1.0"/> の様にxsl:outputで omit-xml-declaration="yes" を指定すれば、XMLの宣言を無くす(出力しない)ことができます。 XML宣言のないXML文書はUTF-8を使うということなので、UTF-8で書き出しされるということになります。 適用されるスタイルシートを変更できないような場合、 上記宣言を取り除いてコピーするようなスタイルシートをさらに適用するというような形になるかと思います。 * #3は、ちょっと言葉が足りないと自分でも思います。 でも、実際、どのように文書を扱っておられるかわからないので、抽象的になるのはしょうがないです。 もし、問題なければ、XML文書、XSLT文書を補足していただくと、こちらでも動作確認した上で、具体的なソースを示せるかと思います。

kiraritto_hikaru
質問者

お礼

度々ありがとうございます。 やっとコンパイルエラーがなくなった。。 と思ったら、出力されなくなりました。。 fso = WScript.CreateObject("Scripting.FileSystemObject"); fl = fso.CreateTextFile( destParam, true, true ); fl.Write(objData.transformNode( objStyle )); fl.Close(); の部分を、見よう見まねで、 conv = new ActiveXObject("Msxml2.DOMDocument.3.0"); conv.async = false; conv.loadXML(objData.transformNode( objStyle)); conv.save(destParam); と変えてみたのですが、、 何がダメなのかもう少し調べてみます。。 ありがとうございました。

kiraritto_hikaru
質問者

補足

XMLとXSLTを公開するのは私の一存では決めかねることなので、できませんが、 ヘッダ部分?は以下のようになっています。 XML ----------------------------- <?xml version="1.0" encoding="utf-8" ?> <entries> 以下内容が書かれています。。 XSLT ----------------------------- <?xml version="1.0" encoding="UTF-8" ?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output encoding="UTF-8" omit-xml-declaration="yes"/> <xsl:template match="/"> <xsl:apply-templates select="entries"/> </xsl:template> <xsl:template match="entries"> 以下内容が続きます。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.3

一応裏技的(?)にできるのがわかりました。 ar conv = new ActiveXObject("Msxml2.DOMDocument.3.0"); conv.async = false; conv.loadXML("<?xml version=\"1.0\"?>"+objData.transformNode( objStyle)); conv.save(destParam); みたいな感じで、encoding指定無しでsaveメソッドを使うとUTF-8で出力されます。 saveで出力すればFSOによる書き出しは不要になります。

kiraritto_hikaru
質問者

お礼

遅くなりました。 ご回答ありがとうございます。 現在教えていただいたコードを埋め込みながら 実験のように行っているのですが、、 (いまいちよくわからないので・・) JavaScriptのコンパイルエラーが出てしまってf^_^; 色々調べてやって見ます。 ありがとうございました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1です。 XSLTの規格的には、 xsl:output encoding="UTF-8" 出力できるはずですが どうもMSXMLでは、指定を無視するようです。(文字コード実際になんでもUTF-16だと宣言を出力する) なので、#1の方法ではできないですね;;

kiraritto_hikaru
質問者

お礼

ご回答ありがとうございます。 スタイルシートを眺めていた結果、 output encoding= を見つけていたのでUTF-8を指定してやってみた結果、うまくいかず、、 だとするとJavaScriptでするしかないのか? と思って色々試行錯誤をわからないなりにしてみてはいるのですが・・・ やっぱりできないんですかね。。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

スタイルシートで出力が作成されていますから スタイルシートで、出力の文字エンコーディングを指定する必要があります。 スタイルシートで <xsl:output method="xml" encoding="UTF-8" /> とか指定してやれば良いように思います。 スタイルシートが変更できないのであれば手作業みたいな作業をせざるを得ないような気がします。

kiraritto_hikaru
質問者

お礼

ご回答ありがとうございます。 No2のお礼欄にまとめて書かせていただきます。m-_-m

関連するQ&A

  • javascriptでXML IEとfireFox

    作成中のホームページで、条件を入力させてその条件に合ったデータ(XMLで管理)を表示する という内容のモノを作ろうとしています。 実際に一通り動く所までは出来たのですが、IEでしか動作せず Firefox等の他ブラウザだと動作しません。 調べてみると、ActiveXObjectが使えないようなのですが どういう方法で実装すると動作するようになるのでしょうか。 よろしくお願いします。 ----------以下ソース一部---------- // ワーク用の XML ドキュメントオブジェクト var objDocWk = new ActiveXObject("Msxml2.DOMDocument.3.0") // 出力用の新しいルートノードを作成 dstNd = objDocWk.createNode(1, "list", "") // XML ドキュメントオブジェクト生成 var objDoc = new ActiveXObject("Msxml2.DOMDocument.3.0") objDoc.async = false objDoc.load("msch.xml") var objRootNode = objDoc.documentElement.childNodes =======================補足======================= 下記のようにやってみたのですが、jsのエラーが起り原因がわからないです。※fireFoxのみIEでは動作確認済 if (window.ActiveXObject) { //for IE // XML ドキュメントオブジェクト生成 var objDoc = new ActiveXObject("Msxml2.DOMDocument.3.0") objDoc.async = false // 曲情報の読込み objDoc.load("msch/msch.xml") // ワーク用の XML ドキュメントオブジェクト var objDocWk = new ActiveXObject("Msxml2.DOMDocument.3.0") } else { //for Firefox // XML ドキュメントオブジェクト生成 var xhttp = new XMLHttpRequest(); xhttp.open("GET", "msch/msch.xml", false); xhttp.send(null); var objDoc = xhttp.responseText; window.alert(objDoc); // ワーク用の XML ドキュメントオブジェクト var xhttp2 = new XMLHttpRequest(); xhttp2.open("GET", "msch/msch.xml", false); xhttp2.send(null); var objDocWk = xhttp2.responseText; window.alert(objDocWk); } // 出力用の新しいルートノードを作成 dstNd = objDocWk.createNode(1, "musiclist", "") // 曲情報のルートノードを取得 var objRootNode = objDoc.documentElement.childNodes エラー内容が objDocWk.createNode is not a function  と objDoc.documentElement is undefined   です。

  • 教えてください><

    JavaScriptを使って XSLTに変数(key)を渡し、XMLをHTMLに変換 その結果を表示したいと思っています。 しかし、うまく表示してくれません。 XSLTをXMLに変換してHTMLするところに関しては正常に動いているので、 おそらくJavaScriptに問題があると思います。 どこがおかしいか教えていただけないでしょうか? 以下ソース <html> <head> <title>好きな本 </title> </head> <body onLoad="load()"> <script type="text/javascript"> var xml, xslt, xslProc; function load() { // 読み込む前に空のドキュメントを生成 if(!document.all) { // ブラウザ判別 // Mozilla xml = document.implementation.createDocument("", "", null); xslt = document.implementation.createDocument("", "", null); } else { // Internet Explorer xml = new ActiveXObject("Msxml2.DOMDocument"); xml.async = false; xslt = new ActiveXObject("Msxml2.FreeThreadedDOMDocument"); xslt.async = false; } // 読み込み(*.xml,*.xsl) xml.load("xmldata.xml"); xslt.load("seiseiform.xsl"); // XSLTプロセッサにスタイルシート(*.xsl)をセット if(!document.all) { // ブラウザ判別 // Mozilla xslProc = new XSLTProcessor(); xslProc.importStylesheet(xslt); } else { // Internet Explorer var xslTemp = new ActiveXObject("Msxml2.XSLTemplate"); xslTemp.stylesheet = xslt; xslProc = xslTemp.createProcessor(); xslProc.input = xml; } } function transform(in) { // XSLTプロセッサにパラメータを与えて変換、結果はresult要素に if(!document.all) { // ブラウザ判別 // Mozilla xslProc.setParameter(null, "key", in); var fragment = xslProc.transformToFragment(xml, document); document.getElementById('result').innerHTML = ""; document.getElementById('result').appendChild(fragment); } else { // Internet Explorer xslProc.addParameter("key",in); try { xslProc.transform; document.getElementById('result').innerHTML = xslProc.output; } catch(e) { document.getElementById('result').innerHTML = e.description; } } } </script> <form> <p><input type="text" name="in" size="40"/></p> <br></br> <p><input type="submit" value="検索" onClick="transform(in.value)"/> </p> </form> <div id="result"></div> </body> </html>

  • VBAでMSXML2.DOMDocument を使用したい

    お世話になります。 下記ソースのようにVBAで「MSXML2.DOMDocument」を使用したいと 思うのですが実行すると 「Dim D As MSXML2.DOMDocument」の箇所で 「コンパイルエラー:ユーザ定義型は定義されていません」 とメッセージがでます。 どのようにすれば「MSXML2.DOMDocument」が使えるのでしょうか? 私は、完全な初心者でありました。何も設定せずに、VBAに下記の 文を入力しました。 解決策と、もし、VBAでDOMを使用する初心者サイトがありましたら 教えて頂ければとおもいます。 よろしくお願いします。 VBAソース-------------------------------------------- Dim D As MSXML2.DOMDocument Set D = New MSXML2.DOMDocument D.async = False If D.Load("C:\SAMPLE.XML") Then MsgBox "読み込み成功" Else MsgBox "読み込み失敗" End If

  • [VBA] MSXML2.DOMDocument

    MSXML2.DOMDocument を用いて、xml のデータを取得しています。 相手のサーバーがダウンしていると、 Dim xmlDoc As New MSXML2.DOMDocument xmlDoc.async = False xmlDoc.Load (taisyoURL) ↑ この部分でフリーズしてしまい、それ以降続行できません。 false も返ってくるわけではないのでどうしたらよいのか 困っております。 タイムアウト又は何かしらの方法でエラー処理をさせる ことはできますでしょうか?

  • 値渡し

    現在、JSPでXMLからJAVAサーブレットで登録したデータを JSPで表示させるプログラムを作成中なのですが、これができません。 どうしたら表示できるのでしょうか? JSPのソースを載せておきますね。 <――JSPソース――> ---省略---- <script> <!-- function getUid() { var Uid = "ここにXMLからの値持ってきて表示させたい"; var xslt=new ActiveXObject("MSXML2.XSLTemplate"); var xsldoc=new ActiveXObject("MSXML2.FreeThreadedDOMDocument"); xsldoc.async = false; xsldoc.load("DB/user/sinkikakunin.xsl"); xslt.stylesheet = xsldoc; var xmldoc=new ActiveXObject("MSXML2.DOMDocument"); xmldoc.async = false; xmldoc.load("DB/user/Uus.xml"); var xslproc = xslt.createProcessor(); xslproc.input = xmldoc; xslproc.addParameter("Uid",Uid); xslproc.transform(); var resultData=xslproc.output; document.getElementById("showArea").innerHTML=resultData; } --> </script> ---省略---- <td width="10"> </td> <td width="409" align="center"> <span style="font-size:9pt"> <form action="sinki4.jsp" method="POST" enctype"text/plain"> <div id="showArea"></div> <center> <br><br> <span style="font-size:9pt">全ての項目が正しければ次へお進みください</span><br> <br> ---省略---- <--XML--> <SAWASHI> <ユーザ ユーザID="5834C08828C95A9822198B7B5B7A6EC3"> <姓>若尾</姓> <名>直孝</名> <ニックネーム>まさき</ニックネーム> <都道府県>   県</都道府県> <市区>   市</市区> <性別>男</性別> <自己紹介>テスト</自己紹介> <アドレス>buchi-w@themis.ocn.ne.jp</アドレス> <パスワード>pass</パスワード> <パスワード確認>pass</パスワード確認> </ユーザ> </SAWASHI>

  • IEでDOMが作成出来ない

    少し昔に作成した未完成のプログラムを発掘したので、修正しています。 そこでIEでAjaxを使用しXMLを受信しDOMにして、その後反映したいのですが、 受信したXMLをDOMにする所で上手く行きません。 // ソース // function parserXML(xmlText) {  if (window.ActiveXObject) {   domDoc = new ActiveXObject('Msxml2.DOMDocument.6.0');   domDoc.async = false;   domDoc.loadXML(xmlText);   return domDoc;  } else if(window.DOMParser) {   return (new DOMParser).parseFromString(xmlText, "text/xml");  } else {   return null;  } } この関数のreturnを計ると、どうしてもIEの場合はデータが出て来ません。 ちなみに渡しているXMLのテキストも確認しましたが問題が見あたりませんでした。 どこが問題なのでしょうか?

  • javascriptとDOMを使ったxmlの読み込みがうまくいかない

    「10日でおぼえるxml入門教室」をいう書籍を使って、xmlの勉強を始めたのですが、ダウンロードした本の内容のソースコードを実行しても想定された結果になりません。そのコードは <html> <head> <title>5-1.XML文書を読み込んでみる</title> <script language="JavaScript"> <!-- var objDoc=new ActiveXObject("Msxml2.DOMDocument"); objDoc.async=false; objDoc.load("books.xml"); window.alert(objDoc.xml); //--> </script> </head> <body> <h1>5-1.XML文書を読み込んでみる</h1> </body> </html> というもので、本来xml文書を表示したダイアログが出るはずなのですが、ブラウザで開いてもダイアログが出ずに、いきなり見出し字が表示されるだけです。 環境はMacOS10.5.5, 使用したブラウザはSafari, Firefox, Operaです。 そもそもIEでないと実行できないコードなのでしょうか? javascriptに関しても初心者なので、できるだけわかりやすい言葉で説明していただけるとありがたいです。

    • 締切済み
    • XML
  • XMLデータをパーサーをかけてテキストデータにするには?

    VB2005の初心者です。 XMLファイルを読み込んで、パーサーをかけてテキストデータにしたいのですが、やり方が分りません。 (パーサーを使わずにテキストデータにすることはできます。) ご存知の方は、ヒントでも良いので教えていただきたいです。 仕事で行き詰っているため、たくさんの方の情報をいただけると幸いです。 下記は、パーサーを使わないやり方です。 Dim xmlDoc As XmlDocument = New XmlDocument Dim strText As String xmlDoc.PreserveWhitespace = True xmlDoc.Load("C:\XMLData.xml") strText = xmldoc.OuterXml パーサーを使う場合、下記のようになると思うのですが、 どのようにテキストデータにすれば良いのか分りません。 (OuterXmlが使えません。) Dim xmlDoc As MSXML2.DOMDocument = New MSXML2.DOMDocument Dim strText As String xmlDoc.PreserveWhitespace = True xmlDoc.Load("C:\XMLData.xml") よろしくお願い致します。

  • DOMで\\localhost\~がloadできません

    DOMについて質問させてください。 DOMで\\localhost\~\test.xmlをloadすると、「指定されたパスが見つかりません。」が表示されloadできません。ちなみに、ループバックアドレスの\\127.0.0.1だとうまくいきます。なぜか理由が分からないため質問させていただきました。\\localhostでloadするには何かwindowsの設定がいるのでしょうか? ・再現手順は以下の通りです。 (1)DOMでCドライブ配下にサブフォルダを作成し、そのサブフォルダ内に共有フォルダを作成します。 (2)作成した共有フォルダ内にxmlファイルを格納します。 (3)DOMで共有フォルダ内のxmlファイルをロードするとエラーになります。 以下、サンプルコードです。(MSXMLのバージョンはどのバージョンでも現象は同じ) '================================================== Set objDOM = CreateObject("MSXML2.DOMDocument.6.0") objDOM.async = false rtResult = objDOM.load("\\localhost\~\test.xml") msgbox "load:" & rtResult & " エラー番号:" & objDOM.parseError.errorCode & " MSG:" & objDOM.parseError.reason Set objDOM = Nothing '==================================================

    • 締切済み
    • XML
  • JavaScriptによるXML読み込み

    ASP.Netである操作をした際、JavaScriptのリソースファイル(JSファイル)のXML読み込み関数を呼び、XMLデータを取得しようとしていますがうまくいく場合といかない場合があり困っています。 XMLのloadでエラーとなっているようなのですがその原因と対処法がわかりません。 どうか詳しい方がいましたら教えて下さい。 ちなみにソースは以下の通りです。 ---------------------------------------------------- var objXML = new ActiveXObject('microsoft.XMLDOM'); objXML.async = false; objXML.load('../../../XMLFile/XMLファイル名'); ---------------------------------------------------- parseError情報ではエラーコードが"-2146697210"です。 load関数でうまくいったりいかなかったりです。 ちなみにXMLファイルは上記のように相対パス指定で行ってます。 以上、お願いします。

専門家に質問してみよう