• 締切済み

UTF-8ファイルの文字化けについて

UTF-8のファイルをADODB.STREAMを使って読み込むマクロを組みました。 読み込むファイルはいくつかのパターンがあるのですが、 正常に処理できるパターンのファイルと、できないパターンのファイルがあるようなんです。 そのファイルをメモ帳で開いて見比べてみると、 正常に処理できるファイルは 2013,01,25 ・・・ヘッダー行 タイトル1,タイトル2,タイトル3 ・・・タイトル行 aaa,BBB,123           ・・・データ行 bbb,CCC,25 という形式になっており、 エラーになるファイルは、 2013,01,25 ・・・ヘッダー行 "タイトル1","タイトル2","タイトル3" ・・・タイトル行 aaa,BBB,123           ・・・データ行 bbb,CCC,25 というふうに、タイトル行のみがダブルクォーテーションで囲まれていました。 エラーになるファイルは、 ヘッダー行は正常に読み込まれているみたいなのですが、 タイトル行以下が全て文字化けしているようなんです。 やはりダブルクォーテーションの影響なのでしょうか。 ご教授いただけると助かります。 よろしくお願いいたします。

みんなの回答

回答No.4

> UTF-8のファイルをADODB.STREAMを使って読み込むマクロを組みました。 というのは、 http://d.hatena.ne.jp/niemands/20090316/1237225383 にあるような感じのコーディングですか? で、 > マクロ実行を中断した際、変数の中身を見てみると、文字化けしていました。 というのは、ReadTextで1行分を読み込んだ文字列変数の中身が文字化け していたのですか? であれば、この時点で文字化けしている原因は、ダブルクォーテーションが 使われているか否かとは関係ありません。ここではダブルクォーテーション に特別な意味は無く、ただの文字として1行分読み込んでいるだけです。 この場合、元のテキストファイルがUTF-8でないか、CharSetの指定が 正しく"UTF-8"を指定していないかが文字化けの原因だと思います。 文字化けしている変数が、読み込んだ一行分をカンマ区切りで分解した後の 変数なら、その分解処理のダブルクォーテーションの扱いに問題が あるのかもしれません。 いずれにしても、「ADODB.STREAMを使って読み込むマクロを組みました」 とだけ書かれてあって、実際のコーディングが提示されていないので、 それ以上のことはわかりません。

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.3

処理するコンピュータのOSと、格納システムの文字セットはUTF-8ですか? コンピュータと格納システムがANSIですと、ファイルはANSIでなければなりません。

noname#206842
noname#206842
回答No.2

なんのマクロなのかわかりませんが、変数の扱い方が間違っているのでは?・・・ 数値変数と文字変数のちがい?・・・ ""で囲まれているのは、CSVを取り込むさい、文字変数だからでは?・・・

maria2013-25
質問者

補足

マクロはVBA(EXCEL)です。変数はstringで、マクロ実行を中断した際、変数の中身を見てみると、文字化けしていました。

  • maiko0318
  • ベストアンサー率21% (1483/6970)
回答No.1

処理するコンピュータのOSと、格納システムの文字セットはUTF-8ですか? ちなみにWindowsならANSIですよ。 メモ帳では自動変換されますから化けていないですけどね。

maria2013-25
質問者

補足

ファイルがUTF-8というのは、それを作成するシステムの仕様で確認しました。メモ帳で読みこんだ際、名前をつけて保存をしようとすると、文字コードがUTF-8となっていたので、UTF-8で間違いないかと思うのですが。

関連するQ&A

  • Cシェルでのファイル編集について

    Cシェルについて、すみませんが教えてください。。 AAA,BBB,1 1,data1,0000 2,data2,0000 3,data3,0000 4,data4,0000 ・・・ CCC,15,2,13 上記のようなヘッダ1行+データN(ここでは13行とする)行+トレイラ1行で 構成されているファイルがあり、このヘッダとトレイラを以下のようなファイル に加工するプログラムをCシェルで作成したいのですが、全く見当がつきません。 AAA,BBB,00001 1,data1,0000 2,data2,0000 3,data3,0000 4,data4,0000 ・・・ CCC,00015,00002,00013 ※ヘッダの3項目めを5桁になるように左0埋め ※トレイラの2項目めを5桁になるように左0埋め ※トレイラの3項目めを5桁になるように左0埋め ※トレイラの4項目めを5桁になるように左0埋め どなたか教えてください。よろしくお願いいたします。

  • CSVファイルの「”」について

    VB6でCSVファイルを読み込みたいのですが、 以下のような項目だと、1項目として読み込むことができません。 例) AAA,"BBB,CCC,"" """,DDD "BBB,CCC,"" """ を1項目として読み込みたいのですが ダブルコーテーションの括りの中に、更にダブルコーテーションがあると うまくいかないみたいです。 何か方法がありますでしょうか? Open DownLoadFile For Input As #1 Len = 32000 Input #1, rec Do Until EOF(1) 処理1 Loop close #1

  • Rubyを使用してcsvファイルを処理しているのですが、どうしてもでき

    Rubyを使用してcsvファイルを処理しているのですが、どうしてもできない事があり質問させていただきました。 下記のようにCSVファイルを処理したいのですが教えてください。 処理前CSVファイル内容:"abc",111,bbb,"ccc","123" 処理後CSVファイル内容:"abc",111,bbb,"xxx","321" 普通にCSVparserを用いて処理すると下記のようダブルクォーテーションが消えてしまいます。 処理後CSVファイル内容:abc,111,bbb,xxx,321 ご教授お願い致します。

  • XMLの特定のデータを書き込むには?

    下記のXMLファイルを読み込んで、 タグYYYのキーでKEY2を検索し、 子要素AAAの値のData2を書き換えるという処理を 作ろうとしてるのですが、 なかなか解決策が見つかりません。 よろしくお願い致します。 例: abc.xml <XXX> <YYY KKK="KEY1"> <AAA>Data1</AAA> <BBB>Data2</BBB> <CCC>Data3</CCC> </YYY> <YYY KKK="KEY2"> <AAA>Data1</AAA> <BBB>Data2</BBB> <CCC>Data3</CCC> </YYY> <YYY KKK="KEY3"> <AAA>Data1</AAA> <BBB>Data2</BBB> <CCC>Data3</CCC> </YYY> </XXX>

  • 文字変換で,を改行されないようにしたい

    下記のスクリプトでファイルから読み込んだ行毎の文字列<>を'=>'に変換後、行の先頭に'を付け足し行の最後に',を付け加えた場合、変な風に改行されてしまいます。 $ cat list1.txt 01<>ああああ 01_01<>あAAA 01_02<>あBBB 01_03<>あCCC 01_04<>あDDD 02<>いいいい 02_01<>いAAA 02_02<>いBBB 02_03<>いCCC 02_04<>いDDD open(IN, "<list1.txt"); @datas = <IN>; close(IN); open(OUT, ">date.txt"); foreach (@datas) { ($a, $b) = split(/<>/, $_); print OUT "'$a'=>'$b',"; } close(OUT); 実行結果 $ cat date.txt '01'=>'ああああ ','01_01'=>'あAAA ','01_02'=>'あBBB ','01_03'=>'あCCC ','01_04'=>'あDDD ','02'=>'いいいい ','02_01'=>'いAAA ','02_02'=>'いBBB ','02_03'=>'いCCC ','02_04'=>'いDDD ', これを下記のように整形するにはスクリプトのどこを直せばよいのでしょうか。 '01'=>'ああああ', '01_01'=>'あAAA', '01_02'=>'あBBB', '01_03'=>'あCCC', '01_04'=>'あDDD', '02'=>'いいいい', '02_01'=>'いAAA', '02_02'=>'いBBB', '02_03'=>'いCCC', '02_04'=>'いDDD', どなたかご教授お願い致します。(上記のスクリプト以外の方法で スマートなやり方などありましたらあわせてご教授頂けますと助かります。)

    • ベストアンサー
    • Perl
  • 3つのcssファイルを1つのcssファイルにする

    あるhtmlファイルがあり、3つのcssファイルたとえば、aaa.css,bbb.css,ccc.cssの3つのファイルがあります。 htmlには3つのボタンがあり、その一つのボタンを押すとaaa.cssのファイルを使用するとし、同じようにbbb.css,ccc.cssもボタンごとに異なる操作ができるとします。 それを1つのcssファイル、abc.cssファイルにまとめたいのですが、どのように作成すればいいのでしょうか? 何かでこのときはこの処理を行うみたいな指定がhtmlかcssファイルのどちらかで出来るのでしょうか? かなり困っております。 どなたか回答よろしくお願いいたします。

  • ''で囲まれていない文字列にマッチする正規表現

    下記のような文字列($str)に対して置換を行い、 my $str = qq{ AAA = BBB - 'CCC' }; $str =~ s/★正規表現★/sprintf("DDD(%s)",$1)/xmsge ; 変換後 $str = DDD(AAA) = DDD(BBB) - 'CCC' ; を実現する★正規表現★を書きたいと思っています。  ・AAA,BBB,CCCは[\w]で構成される文字列です。 ですが、シングルクォーテーション('')で囲まれていない文字列にマッチする正規表現が書けなく困っています。 一度、シングルクォーテーションで囲まれているものも含めて全てDDD()をつけて、そのあとで、シングルクォーテーションを含むものは元に戻すことでやりたいことは実現できているのですが、1行で実現できる方法を探しています。 アドバイスよろしくお願いします。

    • ベストアンサー
    • Perl
  • 圧縮ソフトで複数のファイルを複数のZIPファイルに一括で変換するフリー

    圧縮ソフトで複数のファイルを複数のZIPファイルに一括で変換するフリーソフトは無いですか? 例えば 複数のフォルダ「aaa」「bbb」「ccc」があったとして これを一括処理で[aaa.zip][bbb.zip][ccc.zip]を作ってくれるようなもの、もしくは方法を教えてください。

  • 1つのセルに1つ以上のデータが入っている時のカウントの仕方

    こんばんは、過去の質問を検索してみたのですが、うまくひっかからないので、どなたか教えて頂けないでしょうか。 例えば、ひとつのセルに:で区切られた1つ以上のデータが入っている時のカウント方法を知りたいのです。 <例> AAA:BBB:CCC AAA BBB:CCC BBB の場合なら AAAは2 BBBは3 CCCは2 とカウントできるようにしたいのです。 =countif(A1:A100,"BBB")  →A1~A100がデータ範囲 とやってみましたが、4行目のように 単数で入っているものしか数えられない ようで1しか返って来ません。 (1行目や3行目をカウントできないみたいです。) すみません…よろしくお願いいたします。

  • C言語でのファイル検索&ファイル書き換えについて

    C言語である特定のフォルダを指定して、その階層内(サブフォルダも含む)にあるファイル、例えばsample_nameをファイル名に含むファイルを見つけ、そのファイル内の例えば下のような書き換えを行えるようなプログラムはどうつくればいいのでしょうか。 元ファイル ~sample_name1.txt~ aaa, 10 bbb, 20 ccc, 30 ~sample_name2.txt~ aaa, 30 ccc, 12 bbb, 20 ddd, 15 上のように各ファイルにaaaやbbbが共通に含まれています。 対象ファイル:sample_name 対象文字列:aaa 変換後:100 変換後ファイル ~sample_name1.txt~ aaa, 100 bbb, 20 ccc, 30 ~sample_name2.txt~ aaa, 100 ccc, 12 bbb, 20 ddd, 15

専門家に質問してみよう