VBScriptでUnicodeテキストの読み書き方法

このQ&Aのポイント
  • VBScriptを使用してUnicodeテキストファイルを開き、読み込んで別のUnicodeテキストファイルに書き込むプログラムを作成しましたが、新しく作成されたファイルが文字化けしてしまいます。どうすれば解決できるでしょうか?
  • VBScriptでUnicodeテキストファイルを扱う際に発生する文字化けの解決方法について教えてください。
  • VBScriptでUnicodeテキストファイルの正しい読み書き方法について詳しく教えてください。
回答を見る
  • ベストアンサー

VBScript Unicodeテキスト読み書き

VBScriptで存在するUnicodeテキストファイルを開き、別途、Unicodeテキストファイルを作成し、存在する方のテキストファイルから1行ずつ読み込んで、作成したテキストファイルに、そのまま書き込むだけのプログラムを組みました。 それなのに、新たに出来たテキストファイルは文字化けしてしまっています。 どうすればいいのでしょうか? Option Explicit Dim a, w, x, y, z Set w = CreateObject("Scripting.FileSystemObject") Set x = w.GetFolder(".") Set y = w.OpenTextFile(x & "\Test.txt", 1, True) Set z = w.CreateTextFile(x & "\Result.txt", True, True) Do Until y.AtEndOfLine = True a = y.ReadLine z.WriteLine(a) Loop z.Close y.Close Set z = Nothing Set y = Nothing Set x = Nothing Set w = Nothing MsgBox("Finished!") 元々存在するテキストファイルは、テキストエディタで開いて、間違いなく文字コードが「Unicode」であることは確認していますし、新たに作成されたテキストファイルも、エディタで開くと、文字コードが「Unicode」である旨、表示されています。 元々存在するファイルの中に、「Unicode」文字がたくさん含まれていますので、どうしても、「Unicode」で処理しなければなりません。 もちろん、プログラムは、本当はもっと他のことをするために作るのですが、最初のこの部分でつまづいてしまっています。 お分かりになる方、お教えください。

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

  • ベストアンサー
noname#212058
noname#212058
回答No.1

OpenTextFile メソッドで、ファイルを shift-jis として開いているからです。 OpenTextFile メソッドは第4引数に「ファイルをどの形式として読み込むか」を指定します。省略した場合は shift-jis が指定されたとみなしてそれで読み込む仕様です。 https://msdn.microsoft.com/ja-jp/library/cc428044.aspx なので、w.OpenTextFile(x & "\Test.txt", 1, True, -1) とすればきちんと読み込めるかと思います。

Prome_Lin
質問者

お礼

さっそく、ありがとうございました! 私、2番目のパラメータが「Unicode」の指定だと、思い込んでいました。 申し訳ございません。 助かりました。

関連するQ&A

  • VBScript ワードunicodeテキスト保存

    大量のワードのファイルをテキスト保存する仕事が入り、フォルダ内にあるワードファイルをテキスト保存し、テキストボックスやオートシェープの中のテキストも抜き出すプログラムを「VBScript」で作りました。 テキスト保存する際、Unicode形式で保存しなければならず、調べると、「SaveAs …, 7」がUnicodeによるテキスト保存だと分かったのですが、実際にやってみると、拡張子が「.rtf」ファイルだけが、Unicodeによるテキスト保存され、「.doc」や「.docx」は、「シフトJIS」保存されてしまいました。 私、何か間違っているのでしょうか? 以下、一応、プログラムをコピーしておきます。 問題の部分は「行13」です。 なお、ワードは「Word2010」です。 01 Option Explicit 02 Public a, b, c, d, e, f, g, h, t, u, v, w, x, y, z 03 Set w = CreateObject("Word.Application") 04 w.Application.DisplayAlerts = False 05 w.Visible = False 06 Set x = CreateObject("Scripting.FileSystemObject") 07 Set y = x.GetFolder(".") 08 For Each a In y.Files 09 b = LCase(x.GetExtensionName(a.Name)) 10 If b = "doc" or b = "docx" or b = "rtf" Then 11 h = x.GetBaseName(a.Name) 12 Set z = w.Documents.Open(y & "\" & a.Name) 13 z.SaveAs y & "\" & h & ".txt", 7 14 z.Close 15 Set z = Nothing 16 End If 17 If b = "docx" Then 18 Set z = w.Documents.Open(y & "\" & a.Name) 19 z.SaveAs y & "\qkza934irs2801wuptc56ynv7bm.doc", 0 20 z.Close 21 Set z = Nothing 22 Set z = w.Documents.Open(y & "\qkza934irs2801wuptc56ynv7bm.doc") 23 Call o 24 z.Close 25 Set z = Nothing 26 x.DeleteFile(y & "\qkza934irs2801wuptc56ynv7bm.doc") 27 ElseIf b = "doc" or b = "rtf" Then 28 Set z = w.Documents.Open(y & "\" & a.Name) 29 Call o 30 z.Close 31 Set z = Nothing 32 End If 33 If f > "" Then 34 Set t = x.CreateTextFile(y & "\TB_" & h & ".txt", True, True) 35 t.Write f 36 t.Close 37 End If 38 Next 39 w.Quit 40 Set z = Nothing 41 Set y = Nothing 42 Set x = Nothing 43 Set w = Nothing 44 MsgBox("Finished!") 45 Sub o 46 f = "" 47 For Each c In w.ActiveDocument.Shapes 48 If c.Type = 1 or c.Type = 17 then 49 Set v = c.TextFrame 50 e = v.TextRange 51 f = f & e 52 Set d = Nothing 53 ElseIf c.Type = 6 Then 54 For Each g In c.GroupItems 55 Set u = g.TextFrame 56 e = u.TextRange 57 f = f & e 58 Set u = Nothing 59 Next 60 End if 61 Next 62 End Sub よろしく、お願いします。

  • VbscriptによるExcelのコピー&ペースト

    いつもお世話になります。 教えて頂きたいのは、 「VBScript」でExcelのセルの内容をコピー&ペーストしても、 オートシェイプなどがペーストされません。 どうすれば、すべての内容をペーストできるでしょうか? (分かりにくい変数名で申し訳ございません) Option Explicit Dim v, w, x, y, z Set v = CreateObject("Excel.Application") Set w = v.Workbooks.Open("E:\Test\Original.xls") Set x = w.Worksheets(1) Set y = v.Workbooks.Open("E:\Test\Result.xls") Set z = y.Worksheets(1) v.Application.DisplayAlerts = False x.Range("A1:U55").Copy z.Range("A1:U55").PasteSpecial(-4104) x.Range("AB1:AF55").Copy z.Range("V1:Z55").PasteSpecial(-4104) y.SaveAs("E:\Test\ResultPaste.xls") y.Close w.Close v.Quit Set z = Nothing Set y = Nothing Set x = Nothing Set w = Nothing Set v = Nothing MsgBox("Finished") 上記のプログラムで、「Original.xls」の内容を 「Result.xls」にコピー&ぺーストしたいのですが、 セル内の文字情報はフォントや文字の大きさ(サイズ)、 セルの表示形式などがちゃんとペーストされたのですが、 「Original.xls」にあるテキストボックスや オートシェイプはペーストされませんでした。 すべての内容をペーストするには、 どうすれば良いでしょうか? よろしくお願い致します。

  • Unicodeで編集できるテキストエディタってありますか?

    これまで「Unicode対応」を謳ったエディタの多くは 「Unicodeテキストの読み書きが出来る」エディタに過ぎませんでした。 つまりファイルを読み込むときにUnicode→シフトJISに変換し、編集は シフトJIS環境で行う……という。 保存も同様でシフトJIS→Unicode変換したのち保存します。 これだと確かにUnicodeテキストの読み書きは出来ますが、 Unicode最大に特徴であるJIS外文字のが入っているとシフトJIS変換時に 「?」になってしまいます。 編集もUnicode環境で行えて、Unicodeフォントを指定してやればJIS外文字も 表示できる、そんなフリーエディタってありませんか? 最近の「秀丸」で出来るようになったのは知ってるんですが……

  • VBScript Excel Workbooks

    全く下らない質問で申し訳ございません。 あくまでも、興味があったので質問しているだけで、 以下のやり方でなくても、やりたいことが実現できることは 分かっているのですが、教えて頂ければ幸いです。 VBScriptで Option Explicit Dim x, y Set x = CreateObject("Excel.Application") Set y = x.Workbooks.Open("D:\Sample.xlsx").Worksheets(1) | x.Workbooks(1).Close x.Quit Set y = Nothing Set x = Nothing 普通は、 Set y = x.Workbooks.Open("D:\Sample.xlsx") Set z = y.Worksheets(1) として、 y.Close とする方が分かりやすいのは分かっているのですが、 あえて、勉強を兼ねて、上記のように記述しました。 私が知りたい疑問は、Excelのファイルを2つ開いた場合です。 Option Explicit Dim x, y, z Set x = CreateObject("Excel.Application") x.Application.DisplayAlerts = False x.Visible = False Set y = x.Workbooks.Open("F:\Sample.xlsx").Worksheets(1) Set z = x.Workbooks.Add().Worksheets(1) z.Range("A1").Value = y.Range("A1").Value x.Workbooks(1).Close x.Workbooks(2).SaveAs("F:\Test_02.xlsx") x.Workbooks(2).Close x.Quit Set z = Nothing Set y = Nothing Set x = Nothing このプログラムで、 Set y = x.Workbooks.Open("F:\Sample.xlsx").Worksheets(1) の行が無ければ、「x.Workbooks(1).Close」もなく、 その下の行は、 x.Workbooks(1).SaveAs("F:\Test_02.xlsx") x.Workbooks(1).Close となり、問題なく「Test_02.xlsx」ファイルが出来ていました。 ファイルを2つ開いたので、「Workbooks(2)」となる、 と思ったのですが、どうやら違うようです。 (「インデックスが有効範囲にありません」というエラーになります) 何度も言いますが、こんなことで悩む必要がないのは 分かっているのですが、何か気になります。 上記のやり方で、Excelのファイルを2つ開いている場合の 2つ目のファイルを閉じる方法を教えてください。 ホント、下らない質問で申し訳ございませんが よろしくお願い致します。 以上

  • テキストをUNICODEで記録するには

    現在エクセルVBAで以下のコードを使用してセルから読み込んだデータをテキストファイルに変換するプログラムを使用しています。 今回下記のコードだと文字化けしてしまう文字(韓国語)を扱うことになりました。 エクセルの保存形式を「Unicode」で保存すると問題なくテキストができることがわかりました。 そこで下記のプルグラムで保存形式を「Unicode」で保存する方法を教えてください。 ターゲットになる変数は「text」という変数です。 よろしくお願いします。 Open "x:\文字.txt" For Append As #1 If a = "" Then Print #1, Chr(9); text Else Print #1, Format(a, "@"); Chr(9); intime; "/"; outtime; Chr(9); text No = No + 1 End If Close #1 n = n + 1

  • unicodeファイルの読み込み

    javaアプレット上で BufferedReader file = new BufferedReader(new FileReader("C:/test/list.txt")); で外部テキストファイルを読み込んでいるのですが、この外部テキストファイルの文字コードをANSIからUnicodeに変えるとプログラムが動かなくなります。日本語やアルファベットではない文字の保存のためにテキストをUnicodeにて保存しなければならないのですが、どうすればUnicodeのテキストファイルを読み込むことができますか。

    • ベストアンサー
    • Java
  • VBScriptでExcel(インデックスが…)

    昨日も質問をしたばかりで、自分でも情けないのですが… (すみません、2つ分からないことがあります。) VBScriptでExcelのファイルの中身を 別のファイルにコピーするプログラムを作りました。 見にくい変数名で申し訳ないのですが、 これを実行すると、17行目で 「インデックスが有効範囲にありません」 というエラーメッセージが出て止まってしまいます。 しかし、ここで「Set」しているファイルは 「Original.xls」というファイルなのですが、 シートは20個あります。 この20個という数は、絶対にあり得ない数で、 読み込み側のファイルのシートは最大で17個ですので、 数が足りないはずはありません。 だいたい、「インデックス…」というのは配列変数と思って 処理しているのでしょうか? 何より、プログラムの最初の方に 「On Error Resume Next」を置くと、 このプログラムの所期の目的である、 読み込んだファイルの中身を 「Original.xls」にペースとして ファイル名をかえて保存する というのは実現できています。 2つ目の問題は、 22行目から24行目で 「Original.xls」の不要なシートを削除しているのですが、 途中に「MsgBox」を置いて、 「s」や「i」の値を調べてみても問題はないのに、 シートが1つしか残りません。 例えば、読み込んだファイルのシートの数が3なら 「s + 1 = 4」ですから、この「For~Next」ループは 「4~20」までの17回実行され、 その間、常に4番目のシートを削除し続け、 結果として、必要な1~3のシートが残るはずなのですが、 常に19個削除されてしまいます。 本来は、「Original.xls」のシートの数は1つにしておいて、 必要な数だけ、その1つのシートをコピーで増やしたかったのですが、 それも分からず、仕方なしにこんなやり方をしました。 やはり、そのやり方でないと、ダメなのでしょうか? 以上、ややこしい質問で申し訳ないのですが、 お分かりの方がおられましたら、お教えください。 Option Explicit '01 Dim d, i, s, t, u, v, w, x, y, z '02 Set t = CreateObject("Scripting.FileSystemObject") '03 Set u = t.GetFolder(".") '04 Set v = CreateObject("Excel.Application") '05 Set w = v.Workbooks.Open(u & "\Result\Original.xls") '06 '07 v.Application.DisplayAlerts = False '08 v.Visible = False '09 '10 For Each d In u.Files '11 If t.GetExtensionName(d.Name) = "xls" Then '12 Set x = v.Workbooks.Open(u & "\" & d.Name) '13 s = x.Worksheets.Count '14 For i = 1 to s '15 Set y = x.Worksheets(i) '16 Set z = w.Worksheets(i) '17 z.Name = y.Name '18 y.Range("A1:U55").Copy z.Range("A1") '19 y.Range("AB1:AF55").Copy z.Range("V1") '20 Next '21 For i = s + 1 to 20 '22 .Worksheets(s + 1).Delete '23 Next '24 x.SaveAs(u & "\o_" & d.Name) '25 w.SaveAs(u & "\Result\" & d.Name) '26 x.Close '27 End If '28 Next '29 '30 v.Quit '31 Set z = Nothing '32 Set y = Nothing '33 Set x = Nothing '34 Set w = Nothing '35 Set v = Nothing '36 Srt u = Nothing '37 Set t = Nothing '38 '39 MsgBox("Finished") '40 よろしく、お願い致します。

  • VBScriptのCloseとNothing

    VBScriptのCloseとNothing vbsでバッチ処理をプログラムを作っています。 内容は、テキストファイルの読み込みと書き込みです。 OpenTextFile(読み取り専用)でテキストファイルの中身を読み取り、 文字列操作後、 OpenTextFile(追記モード)で 読み取ったテキストファイルとは別のテキストファイルに書き込みます。 CloseとNothingは いつ、どのように使えばよいのですか? 参考サイトでも良いので教えてください。 よろしくお願いします。

  • Vbscript Unicode文字の判定

    今、テキストファイルがあり、その中には「Unicode文字」が含まれています。 タックシール(ダイレクトメール用)に出力するのに、マンション名やビル名は改行しなければなりません。 1行に印字できる文字数は全角で20文字(40バイト)です。 したがって、「住所1」と「住所2(マンションやビル名)」の正確なバイト数を調べるのですが、今、「Unicode」のテキストファイルを作って、確かめたところ、半角文字は、そのまま「Asc()」で正の整数で返ってきます。 また、通常の2バイト文字(全角スペースから外字の最終文字)までは、負の整数で返ってきました。 しかし、「Unicode」文字は、常に「63」で返ってきます。 Character Code「63」は、半角の「?」です。 どうやら、「VBScript」は「Unicode」文字をすべて「?」として認識してしまうようです。 通常は、住所に「?」はないはずなのですが、最近、お客様のデータを見ていると、半角の「-」が、よく、半角の「?」に化けているので、「?」はちゃんと1バイトとして、Unicodeの文字は2バイトとして調べなければなりません。 VBAのように「Len()」と「LenB()」があれば、問題ないのですが、「VBScript」では、正しく動作しません(すべて「2」と返してきます)。 正確に文字数(バイト数)を調べるには、どうすればよいのでしょうか?

  • Unicode対応タブ型テキストエディタ・メモソフト

    Unicode対応タブ型テキストエディタとメモソフトを探しています。 テキストエディタはGreenPad(http://www.kmonos.net/lib/gp.ja.html)を使っているのですが、多くのファイルを扱う時にタブ型のエディタが欲しいです。 現在メモソフトとしてXTMemo(http://www.towofu.net/soft/xtmemo.php)を使っているのですが、Unicode対応のものは無いですか?

専門家に質問してみよう