由于¤¬(货币符号)输入文件无法正常显示

时间:2018-03-16 23:38:45

标签: c++ xcode ifstream

所以我一直在使用这个输入文件并打败自己,因为无论我做了什么,它都无法正常显示给我。我确实弄明白了为什么会这样,但我想知道EOL(行尾)¬旁边的¤(货币符号)是什么意思,以及为什么它不是添加或删除它们很容易(¤)。我从未遇到过这个问题,或者看过任何有关它的信息,主要是因为我不知道¤到底是什么,如果我不得不猜测我会说它是某种换行或换行。也许这是xCode中那些不错的Apple漏洞之一。

更新3

输入功能:

while (!mDataFile.eof())
{
    MLSInfo temp;
    //mDataFile >> temp.mlsId;
    mDataFile >> temp.mlsId;
    mDataFile >> temp.salePrice;

    mDataFile.ignore();
    getline(mDataFile, temp.address);

    if (!mDataFile.eof()){
        list.listInsertEnd(temp);
    }
}

输出功能:

DListNode* tempPtr = list.getHead();
while (tempPtr != nullptr) {
    MLSInfo temp = tempPtr->dataVal ;
    cout << temp.mlsId << " " << temp.salePrice << " " << temp.address << "";
    tempPtr = tempPtr->nextNodePtr;
}

更新2:

下载损坏文件的链接。 https://ufile.io/jzyxx

更新1:

STRING:

00111 75000.00 123 Main Street¤¬

HEX:

30 30 31 31 31 20 37 35 30 30 30 2e 30 30 20 31 
32 33 20 4d 61 69 6e 20 53 74 72 65 65 74 0d 0a

¤的UNICODE代码:

U+00A4

enter image description here

输出结果如何

enter image description here

要解决此问题,我只需重新输入输入文件即可删除所有¤

enter image description here

1 个答案:

答案 0 :(得分:2)

看起来那些浅灰色的Unicode字符是Xcode显示空白字符的方式。点是空格,箭头是换行符,所以我猜你的货币符号是回车符。

查看你的hexdump,我们看到了角色0x0d。与ascii table相比,确认它确实是一个回车。

由于getline的默认分隔符是换行符*,因此此回车符将直接进入您的字符串!当您稍后尝试输出该字符串时,这会影响事情。 (没有看到你的代码,很难说它为什么以它的方式打印)

这些如何进入你的文件是一个谜,没有更多的信息(在某些时候是Windows机器上的文件?),但只是从文件中删除它们应该足以解决你的问题。

*已实现我假设此处使用getline因为如果您使用cin运算符>>,则会停在任何空格,包括回车。