プロが教えるわが家の防犯対策術!

ファイル中の文字列を一部書き換える処理をしています。regEx.replaceを使って書き換えたところ、日本語が下記のように文字化けしてしまいます。
これを回避するためにどうしたら良いでしょうか?

○変換前:test1.txt
<description>東京都</description>

○変換結果:test2.txt(文字化け)
<description>譚ア莠ャ驛ス</description>

○スクリプト
Set fso = CreateObject("Scripting.FileSystemObject")
Set inFile = fso.OpenTextFile("c:\test1.txt")
Set outFile = fso.CreateTextFile("c:\test2.txt")
Set regEx = New RegExp

regEx.pattern = "テスト"
repStr = "てすと"

Do Until inFile.AtEndOfStream
tempLine = inFile.ReadLine
repLine = regEx.Replace(tempLine, repStr)
outFile.WriteLine repLine
Loop

inFile.Close
outFile.Close

A 回答 (2件)

#1>UTF-8のファイルをUTF-8のままregEX.replaceをかけることはできれば、この問題は解決するように思われます。

これは可能でしょうか?
VBScript(WSH)では、基本的に文字コードは、Shift_JIS です。
なので、ファイルの読込は、シフトJISとして読み込まれます。
(その意味で"regEX.replaceをかけたときに強制的にShift_JISにしようとしていた"ではなく、読み込まれた時に既にShift_JIS になっています。特にこの場合は、変換がなされていないし変換時でないのは明らかです)
ファイルのオープン時に文字コードをUnicode指定(UTF-8ではない)というのはできるのですが、(基本的に自力では)文字コードの変換はできません。
(VBScript を使って文字コードの変換を行うのに、ADOストリームオブジェクトを使う例がOKWaveでもでていました。
http://okwave.jp/qa1891964.html
(上記は、エクセルVBAですが、ほぼ(As とか付けない)そのまま動くと思います)
IEオブジェクトやXMLDOMオブジェクトなんかを使ってもできるかもしれません、後は、外部コマンドを利用するとか・)

この回答への補足

ありがとうございました。その後試行錯誤の末、対処方法が分かりました。

最初にKconvFileでUTF-8からShift-JISにファイル変換しておいて、
rc = bobj.KconvFile(in_file, out_file, 1, 5)
regEX.replace処理
その後さらにKconvFileでShift-JISからUTF-8にファイル変換すれば良いです。
rc = bobj.KconvFile(out_file, in_file, 5, 1)
手間はかかりますが、これで前に進めます。

補足日時:2006/10/12 00:02
    • good
    • 0

ウチ(XPPro)で試してみたところでは、そのような結果にはなりませんでした。


置換パターンである"テスト"が、test1.txt にそもそも含まれませんから、単に内容をコピーした test2.txt が作成されます。
東京都のあとにテストを挿入したものに変更すると、
東京都てすとに置換され、文字化けは起こりませんでした。
よくはわかりませんが、test1.txt の文字コードがShift_JIS ではないのではないでしょうか?
試してみたところでは、test1.txt の文字コードがUTF-8 である時、Shift_JIS として無理やり読み込むとそのように化けるようです。

この回答への補足

さっそくのヒントありがとうございます。
文字コードを調べてみるとBLUEPIXYさんのご指摘の通りです。私のケースでは、文字コードがUTF-8で、regEX.replaceをかけたときに強制的にShift_JISにしようとしていた可能性があります。

だとしますと、UTF-8のファイルをUTF-8のままregEX.replaceをかけることはできれば、この問題は解決するように思われます。これは可能でしょうか?

補足日時:2006/10/10 10:54
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!