これは、テキスト入力ファイルの Unicode 文字に関する質問です。この議論は近いものでしたが、完全な答えではありませんでした。VS2008 でコンパイルされ、Windows で実行されると、これらの文字は読み取り時に認識されます (別のシンボルとして表されますが、読み取られる可能性があります) - g++ でコンパイルされ、Linux で実行されると、空白として表示されます。
‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ
残りの Unicode 記号は正常に機能しているように見えます。すべてをチェックしたわけではありませんが、このセットは機能しないことがわかりました。
質問: (1) なぜですか? (2) 解決策はありますか?
void Lexicon::buildMapFromFile(string filename ) //map
{
ifstream file;
file.open(filename.c_str(), ifstream::binary);
string wow, mem, key;
unsigned int x = 0;
while(true) {
getline(file, wow);
cout << wow << endl;
if (file.fail()) break; //boilerplate check for error
while (x < wow.length() ) {
if (wow[x] == ',') { //look for csv deliniator
key = mem;
mem.clear();
x++; //step over ','
} else
mem += wow[x++];
}
//cout << mem << " code " << key << " is " << (key[0] - '€') << " from €" << endl;
cout << "enter 1 to continue: ";
while (true) {
int choice = GetInteger();
if (choice == 1) break;
}
list_map0[key] = mem; //char to string
list_map1[mem] = key; //string to char
mem.clear(); //reset memory
x = 0;//reset index
}
//printf("%d\n", list_map0.size());
file.close();
}
Unicode シンボルは csv ファイルから読み取られ、Unicode シンボルと関連する文字列が解析されます。最初はコードにバグがあると思っていましたが、この投稿では問題がないことがわかり、文字がどのように処理されるかについて問題を追跡しました。
テストはcout << wow << endl;