ページ 11

日本語がうまく読み込めない

Posted: 2009年11月14日(土) 11:46
by dic
日本語のテキストをfgets関数で取得しようとしてるのですが
なぜか、文字化けが発生してしまいます
原因は何でしょうか?
#include	<stdio.h>
#include	<vector>
using namespace std;


static	vector<char>	v;


void	load()
{
	FILE	*file = fopen( "iGoogle.txt", "rb" );
	char	buf[256];
	while( !feof(file) )
	{
		//	文字化けして取得している
		fgets( buf, sizeof(buf), file );
		printf( buf );
	}
	fclose( file );
}

int		main()
{
	load();

	return 0;
}

Re:日本語がうまく読み込めない

Posted: 2009年11月14日(土) 12:27
by Naohiro19
charだと1バイトしか読み込めないので
2バイト対応であるwchar_tを使ってみてはどうでしょうか?
static	vector<char>	v;
static	vector<wchar_t>	v;

Re:日本語がうまく読み込めない

Posted: 2009年11月14日(土) 12:45
by Justy

>原因は何でしょうか?

 文字コードの問題ではないでしょうか。
 テキストの文字コードを(多分 Shift-JISに)変えて保存しなおすか、
読み込んだ後適切に変換してから表示してみてください。

Re:日本語がうまく読み込めない

Posted: 2009年11月14日(土) 12:51
by YuO
確認時にJustyさんとかぶったことがわかりましたが,気にせず投稿します。


"iGoogle.txt"の文字コードは何ですか。
なんとなく,UTF-8のにおいがしています。

日本語版Windowsのコマンドプロンプトの既定のコードページは932なので,
標準C/C++の範囲の標準出力では,シフトJISの文字列しか出力できません。

文字コードがシフトJISでないならば,
・前もって文字コードを変換しておく
・プログラムで文字コードを変換する
・コマンドプロンプトのコードページを変更しておく (UTF-8なら65001)にする
などの手段をとる必要があります。

Re:日本語がうまく読み込めない

Posted: 2009年11月14日(土) 13:53
by dic
返答ありがとうございます
文字コードですが、windows付属のメモ帳でひらけるので
Sift-JISで保存できてるはずだと思うのですが

文字コードの確認方法がわからないので
iGoogle.txtを送付してみます

Re:日本語がうまく読み込めない

Posted: 2009年11月14日(土) 13:59
by dic
自分で確認しましたが、SHift-JISだとIEだと文字化け起こしますね
UTF-8だと日本語が意図どおりに表示されました

XP付属のメモ帳ですが、UTF-8でも表示できたんですね

Justyさん YuOさんの言うとおり原因は文字コードでした

Naohiro19さんの言うとおり2バイト対応で考えていきます