MapReduceでContext.write(k、v)を使用して(Javaを使用して)データをファイルに書き込もうとすると、ファイルに次の内容が見つかります(viで開き、:set listがあります)。
^@R^@u^@n^@^I1$
^@a^@c^@c^@e^@s^@s^@^I1$
^@d^@e^@f^@a^@u^@l^@t^@ 2$
^@o^@u^@t^@^I2$
^@p^@r^@o^@j^@e^@c^@t^@^I1$
^@t^@a^@s^@k^@^I1$
^@w^@i^@n^@d^@o^@w^@s^@^I1$
^@y^@o^@u^@r^@^I1$
^@
^I
と$
の意味は何ですか? ^I
は\t
を意味しますか? $
は行の終わりを意味しますが、\n
と同じように、Enterキーを意味しますか?もしそうなら、viの「$」と「^ M」の違いは何ですか?
$
は、:set list
によって表示される行の終わりです。デフォルト値はlistchar
オプションです。 ^I
はタブ文字です。
^@
はnull
文字です。
奇妙な理由で、ファイル内のすべての意味のある文字には、数字と(おそらく)スペースを除いてnull
文字が付加されます。
これはVi(m)の問題ではありません。そのメソッドのドキュメントをチェックして、これらのnull
sなしでデータを出力する方法があるかどうかを確認してください。
開いたファイルは、Javaの標準であるUTF-16またはUCS-2でエンコードされています。 vi
(実際のvi
のように、vim
にシンボリックリンクされたvi
ではなく)はASCII(またはISO- 8859-1?)テキスト。vim
を使用するか、ファイルをASCII(eg、iconv -f utf-16 -t ascii <input> <output>
)。
それがvi
コマンドの背後にあるVimである場合は、次のコマンドでファイルをリロードできます。
:edit ++enc=ucs-2
または直接エンコーディングを指定します
$ vim ++enc=ucs-2 filename
または、これらのファイルを頻繁に開く必要がある場合は、ucs-2
オプションの前に'fileencodings'
を追加します。 ~/.vimrc
で。