1

nodejs と socket.io を使用して、utf-8 でエンコードされた文字列をクライアントに渡すのに問題があります。使用しているトランスポート (websocket、flashsocket、または xhr-polling) は問題ではないようです。

コードは非常に平易で単純です。

サーバ:

var app = require('http').createServer(handler)
, io = require('socket.io').listen(app,{log:false});

app.listen(80);

function handler (req, res) {
    fs.readFile(__dirname + '/index.html','utf-8',
        function (err, data) {
          if (err) {
            res.writeHead(500);
            return res.end('Error loading index.html');
          }
          var type="text/html";
          res.writeHead(200, {'Content-Type':type + "; charset=utf-8"});
          res.end(data,'utf8');
        });
}

io.sockets.on('connection', function (socket) {
    socket.emit('msg', { text: 'æøå' });//Here we send the utf-8 characters to the client
});

クライアント:

<!Doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta charset=utf-8 />
<script type="text/javascript" src="http://192.168.0.12/socket.io/socket.io.js" charset="utf-8"></script>
<script type="text/javascript" charset="utf-8">
  window.WEB_SOCKET_SWF_LOCATION = 'http://192.168.0.12/socket.io/static/flashsocket/WebSocketMain.swf';
  var socket = io.connect('http://192.168.0.12');
  socket.on('msg', function(data){alert(data.text);}); //here the data is recieved and put into the alert box
  ...
  ...

データは常に次のように UTF-8 で二重エンコードされているようです。 nodejs サーバーからのデータによるクライアント アラート

nodejs 0.8.17 と socket.io 0.9 を使用しています

4

1 に答える 1

2

node.js ファイル (コードの最初のスニペット) は UTF-8 エンコーディングで保存されていません。node.js は、ファイルが UTF-8 で保存されることを想定しています。これはテキスト エディタによって異なりますが、通常、ファイルを保存するときにエンコーディングを選択できるはずです。

于 2013-01-19T10:53:01.117 に答える