Wenn ich versuche, Context.write (k, v) in MapReduce (mit Java) zu verwenden, um Daten in eine Datei zu schreiben, finde ich den folgenden Inhalt in der Datei (geöffnet mit vi, have list):
Was bedeutet ^@^Iund $? Ist ^Ibedeuten \t? Ich weiß, das $bedeutet das Ende der Zeile, aber bedeutet es die Eingabetaste, genau wie \n? Wenn ja, was ist der Unterschied zwischen '$' und '^ M' in vi?
3 Antworten auf die Frage
3
romainl
$ist das Zeilenende, das :set listmit dem Standardwert der listcharOption angezeigt wird . ^Iist das Tabulatorzeichen.
^@ist der nullCharakter.
Aus irgendeinem seltsamen Grund wird jedem sinnvollen Zeichen in Ihrer Datei ein nullZeichen vorangestellt, mit Ausnahme von Ziffern und (wahrscheinlich) Leerzeichen.
Dies ist kein Vi (m) -Problem: Überprüfen Sie die Dokumentation dieser Methode, um zu sehen, ob es eine Möglichkeit gibt, Ihre Daten ohne diese nulls auszugeben .
1
pilona
Die Datei, die Sie geöffnet haben, ist UTF-16 oder UCS-2-codiert. Dies ist der Standard in Java. vi(wie in real vi, nicht vimsymbolisch mit vi) kann nur ASCII-Text (oder ISO-8859-1?) Text verarbeiten. Verwenden Sie vimdie Datei oder konvertieren Sie sie in ASCII (z iconv -f utf-16 -t ascii <input> <output>. B. ).
0
Ingo Karkat
Wenn Vim hinter Ihrem viBefehl steht, können Sie die Datei mit neu laden
:edit ++enc=ucs-2
oder direkt die Kodierung angeben
$ vim ++enc=ucs-2 filename
oder, wenn Sie diese Dateien häufig öffnen müssen, setzen Sie ucs-2die 'fileencodings'Option voran, z ~/.vimrc. B. in Ihrem .
Sollte vim die Kodierung nicht automatisch erkennen? Oder macht das nur, wenn es eine Stückliste gibt?
pilona vor 10 Jahren
0
@pilona: Was entdeckt wird, wird durch die von mir erwähnte Option "fileencodings" gesteuert.
Ingo Karkat vor 10 Jahren
0