文字化け

[戻る]
サマー [E-Mail] [HomePage] 2006/06/26(月) 21:53:21
ファイルから読み込んで、リストビューに出力したときに文字化けするんですけど
どうしたらなおりますか?

Ban 2006/06/26(月) 22:14:40
多分、文字コードを正しく変換すれば。

# 「教えて君」と呼ばれても仕方ないと思います。
# http://www.google.co.jp/search?hl=ja&q=%E6%95%99%E3%81%88%E3%81%A6%E5%90%
9B&lr=

Blue 2006/06/26(月) 22:16:00
読むこみ対象のファイルのエンコードを調べてみてください。
StreamReaderのコンストラクタの第2引数を指定しない場合、UTF-8(だったかな?)
のファイルとして読み込まれます。

今までのやつを考慮したサンプル)

using namespace System;
using namespace System::IO;
using namespace System::Text;
using namespace System::Collections::Generic;

int main( array< String^ >^ args )
{
    String^ s = __FILE__;
    List< String^ >^ lst = gcnew List< String^ >();
    StreamReader^ sr = nullptr;
    
    // 読み込み
    try
    {
        sr = gcnew StreamReader( s, Encoding::GetEncoding( L"Shift_JIS" ) );
        while ( !sr->EndOfStream )
        {
            lst->Add( sr->ReadLine() );
        }
    }
    catch ( FileNotFoundException^ ex )
    {
        Console::WriteLine( ex->Message );
    }
    finally
    {
        if ( sr != nullptr )
        {
            sr->Close();
        }
    }

    array< String^ >^ a = lst->ToArray();
    // 表示して確認
    for each ( String^ line in a )
    {
        Console::WriteLine( line );
    }

    return 0;
}

PATIO 2006/06/27(火) 09:47:06
多分、C++/CLI(その節は間違って書いて申し訳ない)環境だと
内部の文字コードがunicodeになっているからだと思います。
Windowsのnotepadとかで書いたファイルは通常はShift-jisなので
Shift-jisで書かれたファイルがそのまま読み込まれて
unicodeのつもりで描画しようとして文字化けしてるんでしょう。

C++/CLIの入門書には文字コードはunicodeを使っているというような
記述は無いのですかねぇ。それともあっても目を通していないのか。
あてずっぽうに突き進んでも効率が悪いだけなので
きちんと体系付けて勉強した方がいいですよ。
今のままだと知識がばらばらで整理されないままで終わりそうな気がします。

επιστημη 2006/06/27(火) 13:55:57
> C++/CLIの入門書には文字コードはunicodeを使っているというような
> 記述は無いのですかねぇ。

テキストファイルのエンコーディングについては、
System.IO.StreamReader の項に明記されています。

 「他に指定がない場合、現行システムでは StreamReader は 
 ANSI コード ページではなく、既定の UTF-8 エンコーディングに
 設定されます。」

云々。

PATIO 2006/06/27(火) 14:28:13
ならば、入門書をきちんと読んで理解していれば、
ある程度は見当がついても良い様な気がします。
いきなり正解は無理でも文字コードが違うのかな位は
見当がついても良いのでは?
なんにせよ、基礎知識をもっと仕入れないと躓いてばかりで
さっぱり先に進めそうに無いと思うんですがねぇ。

サマー [E-Mail] [HomePage] 2006/06/27(火) 20:50:40
[[解決]]
とりあえず、Blueさんの方法でうまくいきました。ありがとうございました。

古いスレッドには追加発言できません。