- 締切済み
visual c++の文字コード判別
現在、visual studio2010のvisual C++でメモ帳をテキストボックスに表示するプログラムを作成しています。 しかし、文字コードがASCIIで保存してあるファイルを開こうとすると、文字化けが起こります。 shift-jisなどに変換しようとすると、ほかの文字コードで保存してあるファイルを開いたときに文字化けが起こります。 文字コードがASCIIのテキストファイルを開くときのみ、shift-jisなどに変換しようと思うのですが、文字コードがASCIIであるか、そうでないかを判別できる処理があれば教えていただけないでしょうか?
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kmee
- ベストアンサー率55% (1857/3366)
ん? 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)
うーん ASCIIコードというのは7bit(0~127)までしか使っていない上、そのほとんどがShift_JISと一致しています(有名な違いに「円記号とバックスラシュ」があります) つまり、ASCIIとは、Shift_JISでいわゆる「半角英数」しか使っていない状態と(ほぼ)同じです。字形は判断できないので、コードだけ見れば「同じ」ということになります。 ですから、「ASCIIをSHift_JISに変換」というのも変な話です。 テキストボックスに使ってるのはUnicodeだったりしませんか?
補足
メモ帳を保存するときは、特に設定を変えなければ、文字コードが”ANSI”で保存されますよね? その他の文字コードには、”Unicode””Unicode big endian””UTF-8"がありますが、これは文字コードの変換を行わずとも、textboxに表示することができたのですが、ANSIで保存したファイルだけ文字化けが起こるので、shift-jisに変換せずとも文字化けをなくす方法があれば、ぜひ教えてください。