@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

Ajaxでaspからファイル読み書きで文字化け

1
投稿者投稿内容
Javaスターター
ベテラン
会議室デビュー日: 2004/06/14
投稿数: 67
投稿日時: 2006-11-08 01:18
はじめまして、こんばんは。
今Ajaxの勉強をしています。
Ajaxで書いたHTMLファイル(index.html)からaspファイルをコールして、
ファイルの読み書き(fread.asp,fwrite.asp,test.txt)をしようと考えています。
すべてのファイルをutf-8で書き、各ファイルのMETAはcharset=utf-8にしています。
index.htmlから直接test.txtをコールするときちんと日本語の文字が表示されますが、
aspファイルからtest.txtのファイルを読み書きすると、文字が化けてしまいます。

例)
index.htmlから直接test.txtを読み出すと「あああああ」と表示されますが、
index.htmlからfread.aspをコールしてtest.txtを読み出すと、
「ああああぁE 」となってしまいます。
さらにfwrite.aspをコールしてtest.aspに書き込むと、テキストファイルには
「\チEせトです\」と書き込まれています。

ちなみにファイルの読み書きは以下のようにしています(HTMLタグは省略)。
ちなみにaspファイルで「・・・<BR>」とResponse.writeすると、
「?・・」のように文字化けしてしまいます。
fileread.asp
<%
Response.write("ファイルを読み出します。・・・<BR>")
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objText = objFS.OpenTextFile("C:\Inetpub\wwwroot\Ajax\test.txt")
myText = objText.ReadAll
Response.write(myText)
objText.Close
%>

write.asp
<%
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.GetFile("C:\Inetpub\wwwroot\Ajax\test.txt")
Set objText = objFile.OpenAsTextStream(8,0)
objText.WriteLine("\テストです\")
objText.Close
%>

どうもaspファイルからの読み書きの仕方がまずいということは想像できるのですが、
それ以降の手段がわからず、手詰まりになっています。
どなかたアドバイスいただけませんでしょうか?
よろしくお願いいたします。
カンタ
会議室デビュー日: 2005/10/12
投稿数: 13
投稿日時: 2006-11-09 20:19
OpenTextFile メソッドの最後のパラメータは試してみましたか。
使ったことはありませんがUnicode を指定する値(-1)が定義されているようです。
UTF16だけかも知れませんが・・・

[MSDN] OpenTextFile メソッド
http://msdn.microsoft.com/library/ja/script56/html/jsmthOpenTextFile.asp

[MSDN] OpenAsTextStream メソッド
http://msdn.microsoft.com/library/ja/script56/html/jsmthOpenAsTextStream.asp

ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2006-11-09 22:38
引用:

カンタさんの書き込み (2006-11-09 20:19) より:
OpenTextFile メソッドの最後のパラメータは試してみましたか。
使ったことはありませんがUnicode を指定する値(-1)が定義されているようです。
UTF16だけかも知れませんが・・・



FSO で扱える unicode とは、UTF-16 ということです。
なんで、ADODB.Steam を利用しましょう。

[追記]
引用:
write.asp
<%
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.GetFile("C:\Inetpub\wwwroot\Ajax\test.txt")
Set objText = objFile.OpenAsTextStream(8,0)
objText.WriteLine("\テストです\")
objText.Close
%>



ASP から wwwroot 配下に書き込みを行っているようですけど、くれぐれも security に気を使いましょう。
最低でも当該 virtual directory の設定で、script の実行は切っておくべきです。

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2006-11-09 22:43 ]
Javaスターター
ベテラン
会議室デビュー日: 2004/06/14
投稿数: 67
投稿日時: 2006-11-10 21:55
みなさん回答ありがとうございます。
ご指摘のとおり、ADODB.Streamを使ってやってみたのですが、
ブラウザをUTF-8で表示すると、
&#402;e&#402;X&#402;g&#8218;&#322;&middot;&#129;B
書き込み完了しました。

シフトJISで表示すると、
テストです。
譖ク縺崎セシ縺ソ螳御コ・@縺セ縺励◆縲・
となります。
どっちつかずの表示となってしまい困ってます。

/**** 以下、ソース (test.datにはUTF-8で「テストです。」と書いています。)****/
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=utf-8">
<TITLE>file read</TITLE>
</HEAD>
<BODY>
<%
Dim ObjStream
Set ObjStream = Server.CreateObject("ADODB.Stream")
ObjStream.Open
ObjStream.CharSet="UTF-8"
ObjStream.LoadFromFile "C:\\Inetpub\\wwwroot\\Ajax\\test.dat"
ValData = ObjStream.ReadText
Response.Write Valdata
ObjStream.Close
Set ObjStream = Nothing

%>
<BR>
書き込み完了しました。
</BODY>
</HTML>
wild cat
会議室デビュー日: 2002/08/29
投稿数: 13
投稿日時: 2006-11-11 13:49
ASPファイルの先頭に、以下の1行を追加してみてください。
<%@ Language="VBScript" CodePage="65001" %>

1

スキルアップ/キャリアアップ(JOB@IT)