質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

6回答

16110閲覧

テキストファイル読み込みで日本語がどうしても文字化けします。

Miyahala

総合スコア19

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2019/02/27 23:27

編集2019/03/01 12:48

C#を学習しています。
Windows10でC:¥data¥の場所に
メモ帳で「犬も歩けば棒に当たるabc0123」と記入し作成したテキストファイルを
StreamReaderクラスのReadToEndメゾットで読み込もうとすると
ファイルの読み込みまでは上手くいくのですが、日本語が文字化けします。(日本語offのアルファベットと数字は問題なし、日本語ソフトIMEはATOK2014を使用)
文字コードの指定に問題があるのかと思い、以下のようにファイルの文字コーディングを変更してみて試してみたのですが上手くいきません。
どのようにすれば文字化けせずに読み出すことが出来るのでしょうか?
すみませんがどうぞよろしくお願いいたします。

C#

1using System.IO; 2//中略 3{ 4 using (var reader = new StreamReader(@"c:\data\sample.txt")) 5 { 6 //Console.WriteLine(reader.ReadToEnd(),Encoding.GetEncoding("UTF-8"));//日本語化ける 7 //Console.WriteLine(reader.ReadToEnd(),Encoding.GetEncoding("Shift-JIS"));//日本語化ける 8 //Console.WriteLine(reader.ReadToEnd(),Encoding.GetEncoding("Shift_JIS"));//日本語化ける 9 //Console.WriteLine(reader.ReadToEnd(),Encoding.GetEncoding("ASCII"));//日本語化ける 10 //Console.WriteLine(reader.ReadToEnd(),Encoding.GetEncoding("CP932"));//サポート外 11 } 12 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

papinianus

2019/02/28 01:34

Console.WriteLine("犬も歩けば棒に当たるabc0123");とした場合、文字化けしないのでしょうか?コンソールのフォントの可能性を考えての質問です。
ikadzuchi

2019/02/28 11:11

どのように化けますか?
Miyahala

2019/02/28 11:34

Console.WriteLine("犬も歩けば棒に当たるabc0123");とした場合は問題なく表示されます。 文字化けの様子を記述していませんでした、情報足りずで申し訳ありません。 ???????Z???????abc0123 と言うふうに表示されます、文字コーディングをいくつか変更して試してみましたが同じでした。 ここまで多くの方にアドバイスを頂き感謝致します、頂いたアドバイスを参考に引き続き自分の方も原因を調べます。
guest

回答6

0

ベストアンサー

まずは、そのテキストファイルの文字コードがなにか確認しましょう
UTF8とShiftJISでしか確認してないようですが、その他の文字コードかもしれません

んで、encode指定はStreamReaderのコンストラクタで指定する必要がありますねー

投稿2019/02/27 23:31

編集2019/02/27 23:38
y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wwbQzhMkhhgEmhU

2019/02/28 05:03

y_waiwaiさんのおっしゃるとおり、読み込み側の設定が必要です。 ConsoleにStringを書くときにわざわざEncodingを指定する必要はありません(I/Fもない)。
Miyahala

2019/03/01 12:44

それぞれの方のアドバイスが役に立ち、ベストアンサーを選ぶのが難しかったのですが、「encode指定をStreamReaderのコンストラクタで指定する必要がある」というのが一番大きかったと思うので、今回ベストアンサーに選ばせていただきます。他の方も含め本当にありがとうございました。
guest

0

こんにちは。

まず、Console.WriteLine()に文字コード指定機能は無いようです。つまり、記載されているコードは全て意図通りには動作していません。(文字コード指定できていない。)

テキスト読み出し時の文字コードは、TextReaderのコンストラクタで指定します。指定しなかった時のデフォルトの記載を見つけることができなかったのですが、恐らくANSIと思います。(Windowsのデフォルトがそうですので。)
この場合、日本語であれば Shift-JIS(CP932)でエンコードされていれば文字化けせずに読み出せます。
さて、メモ帳のデフォルトはANSIなので、Shift-JIS(もしくはCP932)で保存されているだろうと思います。

ということは、メモ帳のデフォルトで保存すれば読み出しでは文字化けしていない筈です。
となると出力時に文字化けしている筈です。

最近、Windows 10のコマンドプロンプトの仕様が変わったようです。Consoleへも影響している可能性があります。コマンドプロンプトの設定を変更後、再度トライしてみて下さい。
なお、Windowsの再起動は不要な筈ですが、念の為に設定変更後再起動しておくと確実です。

投稿2019/02/28 03:05

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tamoto

2019/02/28 03:44

横からですが、StreamReaderのデフォルトではUTF-8が使用されます。
Chironian

2019/02/28 03:50

tamoteさん フォローありがとうございます。 ということは、読み出し時点でも化けている可能性が有りますね。 Miyahalaさん。 メモ帳で保存する際に、文字コードを選択できますので、UTF-8で保存されてみて下さい。 指定方法はtakabosoftさんが書かれている通りです。
guest

0

ファイル中のエンコーディング、出力するエンコーディング、コンソールのエンコーディングの三つを合わせなくてはいけません。
三つとも確かめてみてください。

まずメモ帳で該当ファイルを開き、名前を付けて保存を選んで文字コードに何が選ばれているか確認してください。
次に Console.OutputEncoding.WebName と Console.OutputEncoding.CodePage を表示して出力エンコードを確認してください。
それからコンソールで chcp を実行してそれを確認してください。

投稿2019/02/28 00:00

Zuishin

総合スコア28660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

テキストファイルを一気に読むならSystem.IO.File.ReadAllText メソッドを使ったほうが楽な気がします。
こちらも読み込み時に文字コードを指定できます。

なんの文字コードが使われているかは
メモ帳で実際にそのファイルを開いてから、「名前を付けて保存」で出てくるファイル保存画面の
下の方で確認できます。

イメージ説明

投稿2019/02/28 00:38

takabosoft

総合スコア8356

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

???????Z???????abc0123

なるほど。
たぶん「???????Ζ_???????」ですね。(Ζ:ゼータ)
・Shift_JISで保存したテキストを
・UTF-8として読み
・Shift_JIS内の文字しか表示できないコンソールに表示した
ような化け方です。
ファイルに保存する文字コードをUTF-8にすればきっと解決すると思います。

投稿2019/02/28 12:40

ikadzuchi

総合スコア3047

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

多くの方にアドバイスを頂き、ありがたい限りです。
頂いたアドバイスに基づき色々して見た結果、皆さんの言われるとおり2つの点に誤りがありました。

<1,コードの書き方に誤りがある、>

Encode指定の方法の誤り、EncodeはStreamReaderのコンストラクタで指定する。

<2,呼び出し元のテキストファイルの文字コードがANSIであること>

メモ帳の名前を付けて保存のデフォルトはANSIであるからそこをUTF8に変更

・・・でした。

調べている途中から目標が変わってWindowsメモ帳デフォルトのANSIのままで読み込み出来ないか色々試してみましたがそこはサジを投げました。

C#

1  using System.IO; 2//中略  3   { 4 using (var reader = new StreamReader(@"c:\data\sample.txt", Encoding.UTF8)) 5 { 6 Console.WriteLine(reader.ReadToEnd()); 7 } 8   } 9//ANSIで読み込もうとすると・・・???????Z_???????abc0123 10 { 11 using (var reader = new StreamReader(@"c:\data\sample.txt", Encoding.ASCII)) 12 { 13 Console.WriteLine(reader.ReadToEnd()); 14 } 15 } 16//ANSIで読み込もうとすると・・・???????????_??????????? 17 { 18 using (var reader = new StreamReader(@"c:\data\sample.txt", Encoding.Unicode)) 19 { 20 Console.WriteLine(reader.ReadToEnd()); 21 } 22 } 23//ANSIで読み込もうとすると・・・?☆(怪しげな外国語)and(思いっきり環境依存文字)(株) 24 { 25 using (var reader = new StreamReader(@"c:\data\sample.txt", Encoding.UTF32)) 26 { 27 Console.WriteLine(reader.ReadToEnd()); 28 } 29 } 30//ANSIで読み込もうとすると・・・?????? 31 { 32 using (var reader = new StreamReader(@"c:\data\sample.txt", Encoding.UTF7)) 33 { 34 Console.WriteLine(reader.ReadToEnd()); 35 } 36 } 37//ANSIで読み込もうとすると・・・?(ギリシャ語?)?a?a-?I?_?E?????eabc0123 38 39//Shift-JISとCP932とANSIはコンストラクタに記述しようとすると、Encodingに定義なしと警告される。

皆さんのアドバイスがなければ自分では解決は出来ませんでした、どうもありがとうございました。

投稿2019/02/28 15:13

編集2019/03/01 12:51
Miyahala

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2019/02/28 15:18

サクラエディタなどのテキストエディタを使えば文字コードを変えたりできるので、ファイルの中身はなんの文字コードかを調べれますぜ
Zuishin

2019/02/28 15:22

メモ帳でもできますよ。 それはともかく回答のおかげで解決できたなら自己解決ではなく最も役立ったものをベストアンサーに選んでください。
lain

2019/03/01 00:15

Shift-JISファイルなら、 StreamReader(@"c:\data\sample.txt", Encoding.GetEncoding("shift_jis"))
Miyahala

2019/03/01 00:21

ありがとうございます! あと自己解決でコメントしてしまったにベストアンサーを選べなくなってしまい申し訳ありません。
Zuishin

2019/03/01 00:52

選びなおせます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問