2017-05-08 1 views
0

Ich öffne Textdatei mit:Was sind die Zeichen am Anfang von std :: ifstream?

std::ifstream in("1.txt"); 

if(in.good()) 
{ 
    char ch = 0; 

    while(!in.eof()) 
    { 
     in >> ch; 

     std::cout << std::hex << (short)ch << " "; 
    } 
} 

Und ich erhalten drei seltsame Zeichen am Anfang: FFEF FFBB FFBF. Was ist es?

+1

Bitte lesen Sie [warum ist die Verwendung von eof schlecht] (http://stackoverflow.com/questions/5605125/why-is-iostreameof-inside-a-loop-condition-conspired-wrong) –

Antwort

4

Es sieht wie eine Stücklistenmarkierung aus. BOM-Markierungen geben an, dass Ihre Daten UTF-8 sind. Beachten Sie, dass ifstream Dinge wie ASCII verarbeitet.

Am besten hier vorsichtig sein: da Sie es wie ASCII behandeln, könnte etwas schief gehen, wenn Sie auf ein seltsames Zeichen stoßen.

Weitere Informationen zu BOM-Markern finden Sie unter https://en.wikipedia.org/wiki/Byte_order_mark.

+1

Gute Spotting. Meine einzige Verwirrung ist, warum das OP sagt, dass diese Bytes nicht in ihrem Hex-Editor erscheinen. Es sei denn, es ist wie das schreckliche Perforce-Diff-Tool, das ich bei der Arbeit verwenden muss, das Stücklisten ignoriert. – paddy

+1

@paddy Beachten Sie, dass er auch einen 'char' in' short' umwandelt. Die Daten in der Datei sind wahrscheinlich nur die Stücklistenmarkierungen; die zusätzlichen 'ff's sind nur da, da' char' signiert ist und Casting die Zeichenerweiterung macht. Z.B. 0xEF wird 0xFF 0xEF [etc] – atlaste

Verwandte Themen