Node.js が HTTP リクエストを処理する際、リクエストに中国語やその他の非 ASCII 文字が含まれている場合、文字化けが発生する可能性があります。この記事では、この問題の一般的な原因とその解決方法をいくつか取り上げます。
問題 1: エンコード方式の不一致
HTTP リクエストのデータは通常、utf8 エンコードで送信されます。ただし、クライアントが他のエンコード方式(gbkなど)を使用している場合、サーバー側で文字化けが発生します。この問題を解決する方法は、リクエストを処理するときにエンコード方式を正しい方式 (つまり、utf8) に設定することです。
Node.js では、ヘッダーの content-type 属性を設定することでリクエストのエンコード方法を指定できます:
res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
同様に、リクエストを処理するときにも設定する必要があります。エンコード方式を utf8 に変更します。
request.setEncoding('utf8');
問題 2: データがデコードされていない
リクエストを処理する際に、データがデコードされていない問題が発生することがあります。たとえば、リクエストに URL エンコードされたデータが含まれている場合、サーバーはデコードされていないデータを受信し、文字化けが発生する可能性があります。
この問題を解決する方法は、リクエストの処理時に URL エンコードされたデータをデコードすることです。 Node.js では、組み込みのクエリ文字列モジュールを使用して、URL エンコードされたデータをデコードできます。
const querystring = require('querystring'); request.on('data', (data) => { const decodedData = querystring.decode(data.toString()); // do something with decoded data });
問題 3: POST リクエストが正しく処理されない
POST リクエストを処理するときに、が正しく処理されない リクエストボディ内のデータを処理すると、文字化けが発生する可能性もあります。この問題は、リクエスト本文に漢字やその他の非 ASCII 文字が含まれている場合にさらに顕著になります。
この問題を解決する方法は、POST リクエストの処理時にリクエスト本文のデータを正しく処理することです。 Node.js では、組み込みのボディパーサー ミドルウェアを使用して、POST リクエストのリクエスト本文データを処理できます。
const bodyParser = require('body-parser'); app.use(bodyParser.urlencoded({ extended: false })); app.post('/', (req, res) => { // req.body 包含 POST 请求的请求体的数据 });
問題 4: アップロードされたファイルが正しく処理されない
処理時アップロードされたファイルのエンコード方法が正しく処理されていない場合、コード化けの問題も発生します。たとえば、アップロードされたファイルのエンコードが utf8 ではない場合、サーバーは誤ってデコードされたデータを受信します。
この問題を解決する方法は、アップロードされたファイルを処理するときに、ファイルのエンコード方式を正しい方式 (つまり、utf8) に設定することです。 Node.js では、multer ミドルウェアを使用して、アップロードされたファイルを正しく処理できます:
const multer = require('multer'); const storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'uploads/') }, filename: function (req, file, cb) { cb(null, file.originalname) } }); const upload = multer({ storage: storage }); app.post('/upload', upload.single('file'), (req, res) => { // req.file 是上传的文件 });
概要:
上記は、Node.js が HTTP リクエストを処理するときに文字化けを引き起こすいくつかの一般的な問題です。各問題の理由と対応する解決策も示されています。実際の開発では、このような問題が発生した場合、状況に応じて適切な解決方法を選択できます。
以上がnodejs reqの文字化けしたコードの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。