
ファイル中の文字列を一部書き換える処理をしています。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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) Excel VBAについて、 フォルダ内のファイルを全て開きたい場合、 FSOを使えば、Dirは使わ 1 2023/01/27 13:18
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
- Visual Basic(VBA) FileSearch2007に変わる構文について 1 2022/12/16 16:57
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) 入力ボックスが繰り返しポップアップして止まらない。 下記コードでファイル名の変更をしたいのですが、変 1 2022/09/08 11:27
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る EXEの実行内容の結果によって、戻り値を0か1かで返したい 1 2023/07/04 16:40
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
.txtではなく.logの方が良いの...
-
VBAでワークシートを引数として...
-
多数のサブディレクトリ内のフ...
-
テキストファイルで提出とは?
-
ファイル内容の修正、行削除に...
-
リモートのファイル存在確認
-
psqlでエラーログをとりたい
-
ファイル名の一部をbatで変更し...
-
forコマンドのdelimsオプション...
-
Windowsのバッチファイルを利用...
-
renameコマンドについて
-
エクセルの各セルの内容をそれ...
-
ファイルを処理中に次の処理に...
-
VBSでフォルダ内のテキストファ...
-
Windows マシンでFTPバッチが動...
-
Excel VBAの文字列と数値の分類
-
バッチファイル 複数ファイル...
-
cshでファイルサイズ取得
-
バッチ(bat)でリストファイルか...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチ処理でファイルの中身を...
-
拡張子を元に戻す
-
.txtではなく.logの方が良いの...
-
VBAでワークシートを引数として...
-
多数のサブディレクトリ内のフ...
-
psqlでエラーログをとりたい
-
COPYコマンドで結合すると余計...
-
エクセルの各セルの内容をそれ...
-
バッチファイルで文字列削除に...
-
ファイルの最後に文字列挿入
-
UWSCでテキストファイルを開い...
-
バッチファイル 複数ファイル...
-
renameコマンドについて
-
ファイル名の一部をbatで変更し...
-
forfilesで検索したファイルを...
-
外部exeに対しての引数受け渡し
-
Windowsのバッチファイルを利用...
-
VBSでフォルダ内のテキストファ...
-
VBAでエクセルをtxtに変換する...
-
ExcelVBA テキストファイルUNIC...
おすすめ情報