0

申し訳ありませんが、組み込まれた Unicode バージョン (5) が ECMAScript 4 でどのように機能するかを知りたいのです。それがどのようにエンコードまたはデコードされているか、または ECMAScript 4 がどのエンコーディングを使用しているかを知りたいだけです。文字列の文字コード(またはコードポイントだと思います)に使用されるエンコーディングについて言っています。

アドバイス: ここでの「ウルトラパス」は、たとえば「よりも大きい」、またはそれ以上を意味します。英語で通じると思いました。

基本的には UTF-16 だと思っていましたが、私のテストでは U+10FFFF をウルトラパスします。ECMAScript 4 を使用して取得した最大文字コードは例外なく U+FFFFFF でしたが、String.fromCharCode()この文字コードをエンコードするために使用している場合は U+1FFFFF (異なる文字まで生成されますが、異なる文字\u{...}まで生成されます) )。ECMAScript 6 コード ポイントでは、得られる最大値は U+10FFFF であり、わずかな違いです。また、UCS-2 (少なくとも私のブラウザー、Chrome) を使用しているため、ECMAScript 6 はより多くのコード ユニット (コード ユニット = 2 バイト) を生成します。 )、UCS-2を使用してコードポイントをエンコードするときにECMAScript 6に小さな失敗があると思います(ただし、これはバグではなく、小さな失敗です)。知りたい場合は私の質問を確認してください。0xFFFFFFString.fromCharCode()0x1FFFFF

0xFFFFFF最大文字コード (またはコード ポイント...?) です。ECMAScript 4 の char コードだと思うのはなぜですか? おそらく、ECMAScript 6 には noString#codePointAtString#fromCodePointlike がなく、実際に UCS-2 から抜け出しているからです。最初に、ECMAScript 4 を使用したいくつかのテストを示します。

(はい、ECMAScript 4 は存在しませんでしたが、ECMAScript 4 を評価するための未完成の仮想マシンを含むドラフトです。http://ecmascript.orgはダウンしていますが、まだhttp://archive.orgにあるので、少しコピーを作成しました7Zipファイルで)

 // Decimal: 16777215
 const ch = 0xffffff;
 const chString = '\u{ffffff}';

 // Ultrapasses the maximum char code (or code point), then
 // an exception got thrown, well.
 '\u{1000000}';

 // Ultrapasses it too, but returns '\u{ charCode % 1000000 }' anyways.
 String.fromCharCode(ch + 1);

 // Correct.
 chString.charCodeAt(0); // Code: 16777215

 // I didn't expect this!!! \/
 String.fromCharCode(ch); // Gives me '\u{1fffff}' back.

 // An Unicode char code (which is code point, I think) is always
 // equivalent to one character in the string.
 chString.length; // 1
 String.fromCharCode(ch).length; // 1

ECMAScript 4 の概要では、それについては詳しく説明されていません。Unicode 5 が組み込まれているとだけ言及されていますが、エンコーディングについては言及されていません。この場合、どのエンコーディングが組み込まれていますか? また、上記の例で Unicode コード エスケープString.fromCharCode(charCode)と異なる理由を知っておくとよいでしょう。\u{...}

4

0 に答える 0