【发布时间】:2013-02-14 04:07:16
【问题描述】:
我在我的 Mac 上创建了一些 .txt 文件(起初并不认为这很重要,但是......)以便我可以在我正在(不幸的是)另一台计算机上的 Visual Studio 中制作的应用程序中读取它们.它们基本上是充满记录的文件,每行的条目数在顶部,例如:
2
int int
age name
9 Bob
34 Mary
12 Jim
...
在我最初在 Mac 上制作(并成功测试)的代码中,我尝试读取此文件和类似文件:
Table TableFromFile(string _filename){ //For a database system
ifstream infile;
infile.open(_filename.c_str());
if(!infile){
cerr << "File " << _filename << " could not be opened.";
exit(1);
}
//Determine number attributes (columns) in table,
//which is number on first line of input file
std::string num;
getline(infile, num);
int numEntries = atoi(num.c_str());
...
...
简而言之,这会导致崩溃!当我查看它时,我发现了一些有趣的“读取字符串字符时出错”的问题,并发现numEntries 得到了一些疯狂的负垃圾值。这似乎是由于从第一行读取的“num”应该只是“2”,实际上是“ÿþ2”。
通过一些研究,这些奇怪的字符似乎正在格式化……也许是 unicode/Mac 特定的?无论如何,它们都是一个问题,我想知道是否有一种快速简便的方法可以使我在 Mac 上创建的文本文件像在 Mac 终端中一样在 Windows 中协作和运行。我尝试连接到一台 UNIX 机器,在其中放置一个 txt 文件,在其上运行 unix2dos,然后放回 VS,但无济于事……仍然是行首的那些符号!我应该在 Windows 中重新输入文件吗?我很惊讶地发现,当涉及到跨平台文件中的字符时,您所看到的并不总是您所得到的……但我想这是一个很好的教训。
【问题讨论】:
-
文件开头的字节为UnicodeByte Order Mark,表示文本文件采用UTF-16(LE)编码。你是如何创建文本文件的?用文本编辑器?您的项目中需要 Unicode 功能吗?
标签: visual-studio file-io unicode getline