首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有关在Windows中读取getline/文件的问题

有关在Windows中读取getline/文件的问题
EN

Stack Overflow用户
提问于 2013-02-28 12:29:37
回答 1查看 517关注 0票数 1

我在我的苹果电脑上创建了一些.txt文件(一开始我觉得这没什么关系,但是……)这样我就可以在我在另一台计算机上的Visual Studio中制作的应用程序中读取它们。它们基本上是用记录填充的文件,每行的条目数在顶部,例如:

代码语言:javascript
运行
复制
2
int int 
age name
9 Bob
34 Mary
12 Jim
... 

在我最初在Mac上编写(并测试成功)的代码中,我尝试读取这个文件和类似的文件:

代码语言:javascript
运行
复制
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“。

从一些研究,似乎这些奇怪的字符格式things...perhaps unicode/Mac特定?无论如何,它们都是一个问题,我想知道是否有一种快速简单的方法,可以让我在Mac上创建的文本文件在Windows中像在Mac终端中一样协同工作。我尝试连接到一台UNIX机器,在那里放入一个txt文件,在上面运行unix2dos,然后放回VS中,但是没有avail...still行开头的那些符号!我应该在Windows中重新创建我的输入文件吗?我非常惊讶地了解到,当涉及到跨platforms...but的文件中的字符时,你看到的并不总是你所得到的,我想这是一个很好的教训。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-02 20:57:10

正如评论者所指出的,您看到的字节是字节顺序标记。参见http://en.wikipedia.org/wiki/Byte_order_mark

是0xFFFE,是UTF-16的“小端”字节顺序标记。"2“是您的第一个实际字符(对于UTF-16,256以下的字符将由for 0xnn00;的字节表示,其中"nn”是该字符通常的ASCII或UTF-8代码,因此尝试将字节读取为ASCII或UTF-8的东西将正常工作,直到它到达第一个空字节)。

如果您需要找出文本文件的Unicode细节,我所知道的最好的工具是免费的SC Unipad编辑器(www.unipad.org)。它仅适用于Windows,但可以读取和写入几乎任何编码,并且能够告诉您有关该文件的信息。它非常擅长猜测编码。

Unipad将能够打开该文件,并允许您将其保存为您想要的任何编码: ASCII、UTF-8等。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15127535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档