• 締切済み

visual c++の文字コード判別

現在、visual studio2010のvisual C++でメモ帳をテキストボックスに表示するプログラムを作成しています。 しかし、文字コードがASCIIで保存してあるファイルを開こうとすると、文字化けが起こります。 shift-jisなどに変換しようとすると、ほかの文字コードで保存してあるファイルを開いたときに文字化けが起こります。 文字コードがASCIIのテキストファイルを開くときのみ、shift-jisなどに変換しようと思うのですが、文字コードがASCIIであるか、そうでないかを判別できる処理があれば教えていただけないでしょうか?

  • kitct
  • お礼率13% (7/53)

みんなの回答

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.2

ん? ANSIですか、ASCIIですか、はっきりさせてください。 ちょっと調べたら、メモ帳でのANSIはShift_JISと考えてよいようです。 どちらにしても「Shift_JISに変換」する必要はありません。同じものなんですから。 そうではなくて「Shift_JISから変換」じゃないですか? 開くときにどんな関数(メソッド)使ってるかしりませんが、そこで文字コードを指定するようになっているの「Shift_JIS」と指定する、ってことじゃないですか? Visual Basicのことになっていますが、仕組みは同じなので参考になると思います。 http://social.msdn.microsoft.com/Forums/ja-JP/vbexpressja/thread/7e9230a4-6b85-40b0-afbf-d2dca45ab870

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

うーん ASCIIコードというのは7bit(0~127)までしか使っていない上、そのほとんどがShift_JISと一致しています(有名な違いに「円記号とバックスラシュ」があります) つまり、ASCIIとは、Shift_JISでいわゆる「半角英数」しか使っていない状態と(ほぼ)同じです。字形は判断できないので、コードだけ見れば「同じ」ということになります。 ですから、「ASCIIをSHift_JISに変換」というのも変な話です。 テキストボックスに使ってるのはUnicodeだったりしませんか?

kitct
質問者

補足

メモ帳を保存するときは、特に設定を変えなければ、文字コードが”ANSI”で保存されますよね? その他の文字コードには、”Unicode””Unicode big endian””UTF-8"がありますが、これは文字コードの変換を行わずとも、textboxに表示することができたのですが、ANSIで保存したファイルだけ文字化けが起こるので、shift-jisに変換せずとも文字化けをなくす方法があれば、ぜひ教えてください。

関連するQ&A

  • 文字コードの判別について

    とあるテキストファイルがあります。UNIX上で文字コードの判別を行いたいのですが、nkf --guess test.txtと打って調べると、 test.txt: ASCII (CRLF) となります。このファイルは、Shift-JISだという判定だと思います。 ファイルをUTF8に変換したいので、(1)Windows上のエディタ(秀丸)の機能を使ってUTF8に変換してからUNIX上にアップロードしたり、また(2)UNIX上から直接nkf -w --overwrite test.txtを実行して変換したりしたのですが、nkf --guess test.txtを打って調べると相変わらず test.txt: ASCII (CRLF) のままです。 色々調べた結果、ファイルの中身が英数字のみしか書かれていないので、nkfがこのファイルをShift JISだと「推測」しているということがわかってきました。確かに、試しにファイルの中身に日本語を書いて保存して実行してみると、ようやくnkf --guess test.txtの結果が test.txt: UTF-8 (CRLF) と表示されるようになりました。 これらの結果は、ファイルの中身のマルチバイト文字のコードを見て初めて文字コードがわかるようになるというように思えます。 私の理解ではファイル自体にEUCやShift JIS、UTF-8などの文字コードがあるものとばかり思っておりました。つまり、test.txtの内容が"This is a pen."であったとしてEUC、Shift JIS、UTF-8では全く異なる三種類のファイルが存在し得るものだと思っておりました。しかしこれは私の理解が間違っていて、英数字であれば常にShift JISであり、マルチバイト文字があって初めてUTF-8なのかEUCなのかShift JISなのかが決定されるということなのでしょうか? 英数字のみのファイルでもUTF-8ファイルという前提を確認する方法はないのでしょうか? 宜しくお願いします。

  • dreamweaverで文字コードを変換して保存するには

    xpでdreamweaver8を使用しています。htmlファイルをdwで編集後、文字コードを変換して(具体的にはもとのshift-jisからISO-8859-1)そのファイルを保存しなおすことは可能でしょうか。 海外のサーバーにアップしていて、shift-jisだと日本語をインストールしていないPCから接続すると、ブラウザ上でアラートみたいのがでてしまうのでそれを避けたいです。 ファイルには日本語文字列はいっさい入っていませんが、どうもいろんなテキストエディタからコピー、ペーストをくりかえしていたら元ファイルがshift-jisになってしまったようです。 htmlソース内へのメタタグ挿入での変換ではなく、ファイルそのものを文字コードかえて保存したいです。 新規ドキュメント製作内にあるデフォルトエンコードの設定を変えても、またページプロパティでエンコードをかえて適応でもだめでした。 もしくは、別名保存で保存しなおそうにも、文字コード選択のタブがありません。 そして変換可能であるならば、ファイルを一括で変換することはできるでしょうか。 また考えたのですが、dwのFTPで転送するときに文字コードのみを変換して転送することは可能でしょうか。 そのほか、メモ帳、wordpad、sakura editor、notepad++、などのテキストエディタで保存時に変更しようと企みもしましたが、 どれもutf-8は選択にあるのですが、ISO-8859-1のみありません。また、ANSIで保存しようとすると、なぜかshift-jisになってしまいます。 解決方法があれば、よろしくお願いします。

  • Windowsの標準文字コードについて

    標準文字コードはシフトJISとされていますが、 例えば、windowsでメモ帳を使って文字を書いて、保存をした時。 保存する時の文字コードは自由に選択できますよね。 この時点だと、どこにシフトJISコードが使われているのかはサッパリ分かりません。 それで考えたのですが、 文章を保存する時では無く、 メモ帳に書いている時に使われている文字が、 シフトJISなのでしょうか?(その文字を16進数としてみた時にシフトJISの文字コードになっている) つまり、 もともと、windows上でwebページのフォームに文字を入力するとか、 メモ帳で文章を書くと、 シフトJISとして書いている事になるのでしょうか?(シフトJISコードに対応した16進数で書いている) それを、例えばメモ帳ならシフトJISコードを違うコードに変換して保存する機能が付いている ブラウザには、その機能は無いから、フォームからはシフトJISコードとしてのデータしか遅れない。 そう考えると、 windows上では入力する全ての文字がシフトJISコードという事になり、 標準文字コードがシフトJISという言葉にも納得がいくのですが、 上記の理解で正解なのでしょうか? よろしくお願いします。

  • 文字化けの状態で上書き保存した場合、戻せますか。

    こんにちは。 HTMLファイルを文字化けした状態で 開き(EUC-JPファイルをWindowsのメモ帳で 開きました。Shift-jisで開いています)、 英文字部分を直し、そのまま、 上書き保存してしまいました。 このファイルが、ブラウザで、Shift-jisを 指定しても、Euc-jpを指定しても、 文字化けを起こします。 テキストエディッタでは、常にShift-jisで 開かれてしまい、文字化けです。 これをメモ帳以外のテキストエディッタで Euc-jpで保存しなおすと、さらに 文字化けがひどくなります。 Shift-jisで保存したファイルをEuc-jpで 開けるエディタがあればいいかも 知れませんが、こういうエディタは ありません。(もっともブラウザで、 Euc-jpで文字化けをする以上、エディッタでも 無理かもしれません)。 このように、 Euc-jpをShift-jisで開いてしまい、 そのまま、Shift-jisで保存してしまうと、 もはや、もとに戻せないのでしょうか。 (簡単に直ると思っていたのですが、 ぜんぜん直らず困っています)。 何か分かる人がいましたら、 よろしくお願いします。

  • PHP+MYSQLでの文字コードによる文字化け

    お世話になっております。 PHP+MYSQLの構成でDBに登録、DBから参照→表示といったアプリケーションを作っているのですが質問があります。 文字コードを意識せずに、”Shift-JIS”でPHPやhtmlのコードを書いていたのですが、仕様上問題があることに気づいたので今まで書いたソースの文字コードを”EUC-JP”に変更することになりました。 フリーで複数のテキストファイルをShift-JIS→EUCに一括変換するソフトがあるので、そのソフトを使ってEUCの文字コードに変換したところ、ソース中の日本語(全角)が文字化けしてしまいました。 #どの変換ソフトを使っても同様の結果になります ブラウザー上で表示すると問題ありませんが、今後ソースをいじるときに非常に不便です。目的としては、「ソースの文字コードをShift-JISに変換」かつ「ソース内の日本語(全角)の文字化けを起こさない」方法をご存知の方は是非ご教授お願い致します。

    • ベストアンサー
    • MySQL
  • 文字コードが変わってしまう

    Webページ作成関連の市販のテキストについているサンプルコードを自分のマシンにコピーして勉強しています。WindowsXPとWindows7を使っています。 たとえば、【今日問題なく使った】のに、翌日同じHTMLファイルのソースを見たら、文字コードが矢印に変わってしまっています。 改行コード変換ソフトで変換して、また元に戻して作業をしました。 翌日、他の部屋のマシン(WinXP)でそのファイルを開いたら、また文字コードが矢印に変わっていました。 詳しいことはわからないレベルですが、状況だけ書いてみました。 文字コードが変わってしまうタイミングってあるのでしょうか。関係ないかもしれませんが、書籍についてきたサンプルファイルの文字コードはUTF-8なので、文字コード変換ソフトでShift_JISに変更しました(なぜShift_JISにしたかは、特に意味はありません。UTF8がいいというのは聞いていますが、とりあえずShift_JISでやっています)。 難しい理論は理解できないと思いますが、どうしてそうなるかを教えていただける方がいたらお願いします。

  • 文字コードの変換(JISコードへ)

    VBコーディングで質問です。。 テキストをファイルで保存する際に、JISコードで保存するにはどうすればよいのでしょうか。 処理的には、 テキストを*.datファイルで保存するのですが。 'ファイルパスを取得 sFilePath = "A:\aaa.dat" ''使用可能なファイル番号を取得 iFileNo = FreeFile Open sFilePath For Output As iFileNo ''ファイルに書き込む Print #intFileNo, "oneline" Close #intFileNo 上記のような処理をしています。 ファイルに書き込む前に、StrConv関数でvbFromUnicodeでコンバートすると文字化けしてしまう様子なので、 現在は特にコンバート処理はしていません。 しかし、この方法で保存すると保存した後のファイルはShift-JISになっているようなんです。。 Shift-JISではなく、JISコードで保存したいのですが何かいい方法はありませんでしょうか。 よろしくお願いします。 Win2000ProSP2 VB6.0SP5

  • 文字コードでなる文字化けの直し方お願いします。

    海外のWEBHOSTサーバーの WE○NGというところを使っているのですが。 HTMLの記述で charset="Shift_JIS" とすると日本語が文字化けします。 Shift_JIS を EUC-JP iso2022-jp UTF-8 ASCII と色々変えてみても、全部日本語が文字化けしました;; 文字化けにならない、日本語が表示されるにはどうしたらよいでしょうか。 お知りの方 よろしくお願いします。

  • C# 文字コード変換

    お世話になります。 宜しくお願いします。 C#でプログラムを開発しております。 その中で、文字列をShift-JISでテキストファイルへ書き出す という処理があるんですが 以下のように指定しても文字コードがUTF-8で書き出されているようです。 コードを調べましたが間違いが見つけられません。 どこか間違いはございますでしょうか。 ご教授宜しくお願いします。 ・文字コードを判別する場所 : http://encode-detector.uic.jp/tool ・テキストの形式 :ファイル名.DMD /////////////// 以下コード /////////////////////////     String param = "テキストへ書き込む内容";     System.IO.StreamWriter sw =          new System.IO.StreamWriter(             @"C:\hoge.DMD",              false,             System.Text.Encoding.GetEncoding("Shift_JIS") );     System.Text.Encoding src = System.Text.Encoding.UTF8;     System.Text.Encoding dest = System.Text.Encoding.GetEncoding("Shift_JIS");     byte[] temp = src.GetBytes(param);     byte[] sjis_temp = System.Text.Encoding.Convert(src, dest, temp);     param = dest.GetString(sjis_temp);     sw.Write(param);     sw.Close();

  • ファイルの文字コード変換

    一度Shift-JISコードで作成したファイルを、そのままの状態でEUCコードに変換することはできないのでしょうか? ◇試したこと 1)文字コード変換ツール(フリーソフトを2,3種類) 2)インターネットエクスプローラで開いて文字コード変換 ◇結果 1)いずれも変換されなかった 2)変換されたが元のファイルのテキストが崩れた かなりたくさんShift-JISファイルがあるので困っています。 いい方法を御存知の方がいらっしゃいましたら御教授いただければ幸いです。