1

nodejsを使ってchar「十」(\u5341)をbig5「%A4Q」にエンコードしたいのですが、やり方がわかりません。私は助けが必要です。

詳細については、次の html ファイル名は test.html です。

<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=big5">
    <title>test</title>
</head>
<body>
    <form>
        <input name="a"/>
        <input type="submit">
    </form>
</body>
</html>

Chrome でこのファイルを開き、「十」と入力して [送信] をクリックすると、アドレス バーの URL が「 」であることがわかりますhttp://localhost/test.html?a=%A4Q

nodejs を使用して、Chrome (および他のブラウザー) と同じように URL を変換したいだけです。iconv-lite または node-iconv を使用しようとしましたが、「十」を「%A4Q」に変換できません


iconv-lite と node-iconv を使用すると、異なる結果が得られました。コードは次のとおりです。

var iconv = require('iconv-lite');
var Iconv = require('iconv').Iconv;
var iconv2 = new Iconv('utf8', 'BIG5');

function format(buf) {
  var rtn = "";
  for(var i=0;i<buf.length;i++) {
      rtn += "%" + buf[i].toString(16);
  }
  return rtn;
}

var chr = '十';
console.log(format(iconv.encode(chr, 'big5')));
console.log(format(iconv2.convert(chr)));

結果は次のとおりです。

%a2%cc
%a4%51

私もJava を使用しています。System.out.println(URLEncoder.encode("十", "Big5"));'%A4%51' も取得します。

関連する質問は次のとおりです。C# と Java の URL デコードの違い

4

3 に答える 3

0

%51 は big5 の char 'Q' であるため、'%A4Q' は '%A4%51' と等しいため、urlencode はそれを解析します。

さらに、'%A4Q' の 'A' は大文字と小文字を区別しませんが、'Q' は大文字と小文字を区別しません。'Q' と 'q' は異なるためです (%51 と %71)。

于 2014-12-23T15:16:07.933 に答える