申し訳ありませんが、組み込まれた 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に小さな失敗があると思います(ただし、これはバグではなく、小さな失敗です)。知りたい場合は私の質問を確認してください。0xFFFFFF
String.fromCharCode()
0x1FFFFF
0xFFFFFF
最大文字コード (またはコード ポイント...?) です。ECMAScript 4 の char コードだと思うのはなぜですか? おそらく、ECMAScript 6 には noString#codePointAt
とString#fromCodePoint
like がなく、実際に 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{...}