
ファイル中の文字列を一部書き換える処理をしています。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
No.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)
手間はかかりますが、これで前に進めます。
No.1
- 回答日時:
ウチ(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をかけることはできれば、この問題は解決するように思われます。これは可能でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
VBAでワークシートを引数として...
-
.txtではなく.logの方が良いの...
-
psqlでエラーログをとりたい
-
Windowsのバッチファイルを利用...
-
COPYコマンドで結合すると余計...
-
ファイルを読み込んだらVBがフ...
-
ファイル内容の修正、行削除に...
-
バッチファイルで文字列削除に...
-
バッチファイル 複数ファイル...
-
★★★PowerShellのpatternについ...
-
実行時にコモンダイアログのフ...
-
trcからtxtへの変換方法を教えて!
-
ADODB.Streamで開いたファイル...
-
テキストファイルで提出とは?
-
バッチファイルからVBAに引数を...
-
テキストデータExcel取込時の文...
-
ファイルの最後に文字列挿入
-
DOSコマンドによるテキストファ...
-
Unicode 対応の sed って無いの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
.txtではなく.logの方が良いの...
-
バッチ処理でファイルの中身を...
-
VBAでワークシートを引数として...
-
多数のサブディレクトリ内のフ...
-
エクセルの各セルの内容をそれ...
-
拡張子を元に戻す
-
ファイルの最後に文字列挿入
-
psqlでエラーログをとりたい
-
COPYコマンドで結合すると余計...
-
renameコマンドについて
-
バッチファイルで文字列削除に...
-
テキストファイルで提出とは?
-
ファイル名の一部をbatで変更し...
-
forfilesで検索したファイルを...
-
バッチファイル 複数ファイル...
-
Windowsのバッチファイルを利用...
-
UWSCでテキストファイルを開い...
-
バッチファイルからVBAに引数を...
-
accessでSQL文を使ってcsvファ...
-
ファイル内容の修正、行削除に...
おすすめ情報