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

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

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

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

3回答

1053閲覧

漢字コンソール画面に出力したい

reddo

総合スコア5

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

1グッド

1クリップ

投稿2020/03/12 20:48

C++言語においてテキストファイルから漢字を
取得してコンソール画面に出力したいのですが、
文字化けして上手くいきません。

アルファベットの場合ならうまくいきますが………

どなたか解決法ご教授して頂ければ嬉しいです。

int main()
{
FILE* fp;
errno_t error;

int i=0; char input[100+1][100]; error = fopen_s(&fp,"Language/1.txt", "r");

while (feof(fp) == 0) {
fgets(input[i], sizeof(input[i]), fp);
printf("%s", input[i]);
i = i + 1;
}

fclose(fp); return 0;
s.k👍を押しています

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

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

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

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

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

guest

回答3

0

あなたの言うコンソールがなにかわかりませんが、

Linuxの場合はUTF8が、
Windowsの場合はShiftJISが

デフォルトの文字コードとなっているため、それと違ってると文字化けしますね

投稿2020/03/12 23:10

y_waiwai

総合スコア87774

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

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

reddo

2020/03/13 10:03

ご回答ありがとうございます。 コンソール画面はCUI(黒い画面)のことです。 変換したりすることは可能でしょうか? ネット上ではそのような解決例はありませんでした。 しかし、scanf関数を用いてキーボードからなら 日本語を文字列配列に格納することはできたので ファイルから配列に格納することも理論的に可能な気がしますが………
y_waiwai

2020/03/13 14:20

その読み込もうとしてるファイルをその文字コードに変換してやればいいです。 そこらへんのキーワードでぐぐってみれば
guest

0

テキストファイルのエンコードが問題になりますが、UFT-8 だと、MSVC であれば以下のソースで可能です

c

1#include <stdio.h> 2#include <locale.h> 3 4int main(void) 5{ 6 wchar_t input[100+1][100]; 7 FILE* fp; 8 setlocale(LC_ALL, ""); 9 fp = fopen("Language/1.txt", "r,ccs=UTF-8"); 10 for (int i = 0; i < 101 && fgetws(input[i], sizeof *input / sizeof **input, fp); ++i) { 11 fputws(input[i], stdout); 12 } 13 fclose(fp); 14}

wchar_t [] (UTF-16) で読込むことになりますので、表示するだけならばこのままでいいでしょうが、char [] (Shift_JIS) が欲しいのであれば、変換する必要があります。

投稿2020/03/13 11:53

Bull

総合スコア986

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

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

0

ファイルの扱いをバイナリモードにしてみたらどうなるでしょうか。
error = fopen_s(&fp,"Language/1.txt", "rb");
かな。
テキストモードだと、いろいろ「お世話」してくれちゃうのですが、意図した文字コードと違ったりするとぐちゃぐちゃになるので、その辺をOFFにしたら、ということです。

投稿2020/03/12 23:11

thkana

総合スコア7639

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

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

reddo

2020/03/13 10:59

回答ありがとうございます。 バイナリファイルでの取得となりますとメモ帳 に入力した値をプログラムに与えることが出来なくなってしまう のでちょっと厳しそうです。
thkana

2020/03/13 11:57

y_waiwaiさんの回答のほうが「ありそう」な気がしつつ。 Windowsなら、 type ファイル名 unix系なら cat ファイル名 とかやってみたらどのように表示されますか。これで化けているようなら、文字コードの問題で、根本的にはC/C++言語の問題ではないということになります。 それはともかく。 バイナリモードというのは、取り込んだデータを加工しないでそのまま扱う、ということであって、それによって「入力した値をプログラムに与えることが出来なくなってしまう」というようなものではありません。
pepperleaf

2020/03/13 12:42

unix系なら、od コマンドでバイナリ出力すると、文字コードがある程度推定できます、、、と言うより、質問者さんの認識に文字コードは無いように思います。Shift-JIS, UTF-8 が何? てところから、の気がします。 多分、Windowsで、メモ帳かなんかで、作ったファイルが読めない、と言うことでしょうか。そうすると、ファイルは、UTF-8で作成され、そのまま、コンソールに出力すると文字化けすると、いう話では?
Bull

2020/03/13 12:52

最近?のWindows のメモ帳って、新規ファイルの文字コードが UTF-8 なんですね。 普段メモ帳はほとんど使わないので、全然知らなかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問