【发布时间】:2013-01-14 18:35:18
【问题描述】:
这是一个关于文本输入文件中的 unicode 字符的问题。 This discussion was close but not quite the answer。用 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();
}
从 csv 文件中读取 unicode 符号并解析为 unicode 符号和关联的字符串。最初我虽然代码中存在错误,但在 this post the review 中发现它很好,我按照问题处理字符。
测试是cout << wow << endl;
【问题讨论】:
-
“没有可发布的代码”...“用 g++ 编译”。请消除矛盾。
-
好的,在上下文中没有理由发布代码,虽然从技术上讲你是正确的,有代码要发布 - 对不起我糟糕的语法语义
-
Windows 和 Linux 也一样吗?大不同!
-
我知道有人会问问题是什么 - 抱歉。是的,#Bo Persson 它是 windows 和 linux
标签: c++ linux unicode g++ ifstream