10

これは現在、私の node.js サーバー コード全体です。

require('http').createServer(function (req, resp) {
    var html = [
        '<!DOCTYPE html>',
        '<html>',
            '<head>',
                '<meta charset="utf-8" />',
                '<title>Sample Response</title>',
            '</head>',
            '<body>',
                '<p>Hello world</p>',
            '</body>',
        '</html>'
    ].join('');

    resp.writeHead(200, {
        'Content-Length': Buffer.byteLength(html, 'utf8'),
        'Content-Type': 'application/xhtml+xml;'
    });
    resp.write(html, 'utf8');
    resp.end();
}).listen(80);

node.js ドキュメントの私の理解に基づいて、 resp.write() の 2 番目の 'utf8' 引数により、node は JavaScript 文字列がネイティブに表現される UTF-16 ではなく、html 文字列を UTF-8 としてエンコードする必要があります。しかし、ブラウザーで localhost:80 を指定してソースを表示し、それをローカルの html ファイルに保存すると、Notepad++ はファイルが UTF-16 でエンコードされていることを通知します。さらに、W3C html バリデータ ツールを実行すると、「内部エンコーディング宣言 utf-8 がドキュメントの実際のエンコーディング (utf-16) と一致しません」というメッセージも表示されます。

node.js に HTTP 応答本文を UTF 8 としてエンコードさせるにはどうすればよいですか?

4

3 に答える 3

12

によると: https://www.w3.org/International/articles/http-charset/indexおよびhttps://en.wikipedia.org/wiki/List_of_HTTP_header_fields

HTTP ヘッダーは次のようにすることをお勧めします。

"Content-Type: text/html; charset=utf-8"

以下の2つのコードで、IE8ブラウザでutf-8で記録することができます。フランス語の XP32 では、メモ帳 ++ でのタイ文字の表示が許可されていません。

ショートフォーム :

var http = require('http');

var server = http.createServer(function(req, res) {
    var body = '<p>Hello Döm</p>\n \
  <p>How are you ?</p>\n \
  <p>ผมหมาป่า(I am The Wolf)</p>';

  res.writeHead(200, {"Content-Type": "text/html; charset=utf-8"});
  res.write(body, "utf-8");
  res.end(); 
});

server.listen(8080);

長い形式:

var http = require('http');

var server = http.createServer(function(req, res) {
  res.writeHead(200, {"Content-Type": "text/html; charset=utf-8"});

  var title = 'Sample Response'
  var body = '<p>Hello Döm</p>\n \
  <p>How are you ?</p>\n \
  <p>ผมหมาป่า(I am The Wolf)</p>';

  var code =  [
        '<!DOCTYPE html>',
        '<html>',
            '<head>',
                '<meta charset="utf-8" />',
                '<title>' + title + '</title>',
            '</head>',
            '<body>',
                body,
            '</body>',
        '</html>'
    ].join('\n');

  res.write(code, "utf8");
  res.end(); 
});

server.listen(8080);

HTML ページで IE8 から記録すると、タイ文字が適切に保持されます。

于 2016-05-04T16:37:55.507 に答える
0

信じられないかもしれませんが、私がインターネットで抱えているこの問題は、... Internet Explorer が原因です。この場合、Internet Explorer 11 は何らかの理由で、元のページのエンコーディングに関係なく、[ソースの表示] ウィンドウの結果を UTF-16 で保存しても問題ないと考えています。したがって、localhost からの私のテスト ページは utf16 として保存され、google.com は utf16 として保存されました。

IE は酷いブラウザだと彼らが言ったとき、私は彼らを信じませんでした。私たちは皆、しばらく学ぶ必要があると思います:(

于 2013-10-12T23:51:11.857 に答える