私はtest.txt
(これはJavascriptソースの同じフォルダーにあります)の内容を読み、このコードを使用して表示しようとしています。
var fs = require("fs");
fs.readFile("test.txt", function (err, data) {
if (err) throw err;
console.log(data);
});
test.txt
の内容はnano
上に作成されました:
Node.jsのreadFile()をテストする
そして私はこれを得ています:
Nathan-Camposs-MacBook-Pro:node_test Nathan$ node main.js
<Buffer 54 65 73 74 69 6e 67 20 4e 6f 64 65 2e 6a 73 20 72 65 61 64 46 69 6c 65 28 29>
Nathan-Camposs-MacBook-Pro:node_test Nathan$
ドキュメントから :
エンコーディングが指定されていない場合は、生のバッファが返されます。
これは<Buffer ...>
を説明するかもしれません。ファイル名の後の2番目のパラメータとして、有効なエンコーディング、たとえばutf-8
を指定します。といった、
fs.readFile("test.txt", "utf8", function(err, data) {...});
やってみる
fs.readFile("test.txt", "utf8", function(err, data) {...});
基本的にはエンコーディングを指定する必要があります。
Bufferオブジェクトを返しています。
文字列にしたい場合は、data.toString()
で変換できます。
var fs = require("fs");
fs.readFile("test.txt", function (err, data) {
if (err) throw err;
console.log(data.toString());
});
非同期:
fs.readFile('test.txt', 'utf8', callback);
同期:
var content = fs.readFileSync('test.txt', 'utf8');
これはグーグルで高まってくるので、私は最初の質問についてのいくつかの文脈上の情報を追加したいと思います(強調私のもの):
WhyNode.jsのfs.readFile()は文字列ではなくバッファを返しますか?
たとえyoがプログラマとして知っていたとしても:Nodeはあなたが読み込もうとしているファイルの内容がわからない。それはテキストファイルであるかもしれません、しかしそれはちょうど同様にZipアーカイブかJPGイメージであるかもしれません - Nodeは知らない。
たとえNode knewがテキストファイルを読むことになっていたとしても、どの 文字エンコーディング が使われているのかわかりません文字エンコーディング自体はファイルに格納されていないためです。
guess テキストファイルの文字エンコーディングを多少なりとも自信を持って推測する方法はありますが(これはテキストエディタがファイルを開くときに行うことです)、通常はコードを推測に頼らないようにします。あなたの明示的な指示なしに。
そのため、これらの詳細のすべてを知ることはできず、知ることもできないので、Nodeはその内容について何も想定せずに、バイトごとにファイルを読み取るだけです。
そしてそれが返されるバッファです。生のバイナリコンテンツのための独創的なコンテナです。このコンテンツがどのように解釈されるべきかは開発者としてあなた次第です。
data
変数はBuffer
オブジェクトを含みます。次の構文を使用して、それをASCIIエンコーディングに変換します。
data.toString('ascii', 0, data.length)
非同期的に
fs.readFile('test.txt', 'utf8', function (error, data) {
if (error) throw error;
console.log(data.toString());
});