お世話になります、UTF-8 で書かれたファイル(日本語)を一行づつ読込んで処理を行い
たいのですが、
一行読込み変数をstd::wstring 型にしますと、下記のエラーが出ます、解決策をご教示
願えませんでしょうか。
環境:Visual Studio 2005 pro 及び、gcc (GCC) 4.2.4
#include <string>
#include <fstream>
int main(int argc, char * argv[])
{
std::wstring wline;
std::ifstream ifs( *argv );
if(ifs.fail())
return false;
while( getline(ifs, wline.c_str()) ) {
}
return 0;
}
error C2784: 'std::basic_istream<_Elem,_Traits>
&std::getline(std::basic_istream<_Elem,_Traits>
&,std::basic_string<_Elem,_Traits,_Alloc> &)' : テンプレート 引数を
'std::basic_istream<_Elem,_Traits> &' に対して 'std::ifstream' から減少できませ
んでした
'std::getline' の宣言を確認してください。
error C2784: 'std::basic_istream<_Elem,_Traits>
&std::getline(std::basic_istream<_Elem,_Traits>
&,std::basic_string<_Elem,_Traits,_Alloc> &)' : テンプレート 引数を
'std::basic_string<_Elem,_Traits,_Alloc> &' に対して 'const wchar_t *' から減少
できませんでした
'std::getline' の宣言を確認してください。
error C2780: 'std::basic_istream<_Elem,_Traits>
&std::getline(std::basic_istream<_Elem,_Traits>
&,std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)' : 3 引数が必要です - 2
が設定されます。
'std::getline' の宣言を確認してください。
error C2143: 構文エラー : ')' が '{' の前にありません。
fatal error C1903: 直前のエラーを修復できません。コンパイルを中止します。
myproje - エラー 5、警告 0
ifstream 改め wifstream ちゃいますか?
それはそれとして、wstring で UTF-8 って読めるんですか。
実装にもよるでしょうけど、少なくとも VC++ で Unicode ってのは UTF-16 のことなの
ではないかと。
Windows では UTF-8 は MBCS の扱いですよ。
wifstream は
Shift_JIS で書かれたものを utf-16 で読み込むもの、
として実装されていたような気がします。
皆さん、回答ありがとうございましたそして、返事が遅れたことをお詫びします。
VC++ の場合、επιστημη さんのwifstream で目的が果たせました
aetos さんのご指摘のとおり、wstring ではUTF-8 は読めず、PAI さんのご指摘通りで
した
linux のUTF-8 はstring で扱う事ができたことを報告しておきます。