JavascriptすべてのUnicode文字を出力
4638 ワード
くだらないことを言わないで、直接ソースコードに行きます.
簡単に説明します.JavascriptのUnicode文字は「u」の後に4桁の16進数を加えて表すことができますが、これは実際にはエスケープ文字でもあります.つまり、私の上のプログラムは「00」~「uffff」を遍歴しただけなので、すべてのUnicode文字を出力しました.
注意しなければならないのは、私たちの一般的な考え方は、変数に「u」を循環して格納し、コードのような4桁の16進数を生成して変数を格納し続けることです.
しかし、事実上、変数に「u」を直接保存することはできません.これは、「u」が不正なUnicode文字であると考えられ、JSコードのエラーを引き起こすからです.私の解決策は、コードなどのエスケープ文字'\'を使用して''を格納することです.
我々はすべて知っていて、エスケープ文字は't'のようにプログラムの中で1つの文字だと思われて、それでは'u 89 ab'のようなエスケープ文字はプログラムの中でも1つの文字だと思われるべきで、しかし私達の今メモリの中の"u 89 ab"は1つの文字ではありませんて、6つの文字で、このように直接出力するとページの中でただ“u 89 ab”をそのまま表示することができて、明らかに私たちが望んでいる文字ではありません.どうすればいいですか?簡単ですが、Javascript独自のevalメソッドで文字列をJavascriptコードとして再実行できます.具体的な使い方は自分で検索し、再実行するときは'u 89 ab'というデータを一度に解析するので、Unicodeエスケープ文字として正しく認識でき、このUnicode文字を正しく出力することができます.
表現力が限られていて、詳しい言葉で説明しようと努力していますが、ちょっと分かりにくいと思います.窓紙を1枚重ねれば,1筒で破れてしまう.
実はもう一つのアルゴリズムの性能はもっと良いと思います.Unicode文字を変数に直接入力し、eval変換を使わずに直接出力することができます.このレンガを投げて玉を引くのは、さらなる研究が必要です.
更新
新しいアルゴリズムは、パフォーマンスが向上する可能性があります.まずコードをつけます.
はい!君は見間違えていない.これはクリップではありません!これはすべてのJSコードです!この数行しかありません!
Stringオブジェクトのドキュメントをよく見てからStringがあることがわかりました.fromCharCode()という神器は、具体的なドキュメントは自分で探しました.ははは、私を吹き飛ばさないでください.性能が分からない.
本文章は著作権法によって保護され、著作者の同意を得ずに盗用してはならない.この文章の内容を使用または引用するには、著者名、元の住所を明記してください.http://www.cnblogs.com/libook
1 var hex = new Array('0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F');
2 var thestr = '';
3 for (var a = 0; a < 16; a++) {
4 for (var b = 0; b < 16; b++) {
5 for (var c = 0; c < 16; c++) {
6 for (var d = 0; d < 16; d++) {
7 var ustr = '\\u' + hex[a] + hex[b] + hex[c] + hex[d];
8 thestr += ustr;
9 }
10 }
11 }
12 }
13 eval('document.write(\'' + thestr + '\');');
簡単に説明します.JavascriptのUnicode文字は「u」の後に4桁の16進数を加えて表すことができますが、これは実際にはエスケープ文字でもあります.つまり、私の上のプログラムは「00」~「uffff」を遍歴しただけなので、すべてのUnicode文字を出力しました.
注意しなければならないのは、私たちの一般的な考え方は、変数に「u」を循環して格納し、コードのような4桁の16進数を生成して変数を格納し続けることです.
1 var ustr='\u';//
2 ustr+=hex[a]+hex[b]+hex[c]+hex[d];
しかし、事実上、変数に「u」を直接保存することはできません.これは、「u」が不正なUnicode文字であると考えられ、JSコードのエラーを引き起こすからです.私の解決策は、コードなどのエスケープ文字'\'を使用して''を格納することです.
1 var ustr='\\';
2 ustr+='u';
3 ustr+=hex[a]+hex[b]+hex[c]+hex[d];
我々はすべて知っていて、エスケープ文字は't'のようにプログラムの中で1つの文字だと思われて、それでは'u 89 ab'のようなエスケープ文字はプログラムの中でも1つの文字だと思われるべきで、しかし私達の今メモリの中の"u 89 ab"は1つの文字ではありませんて、6つの文字で、このように直接出力するとページの中でただ“u 89 ab”をそのまま表示することができて、明らかに私たちが望んでいる文字ではありません.どうすればいいですか?簡単ですが、Javascript独自のevalメソッドで文字列をJavascriptコードとして再実行できます.具体的な使い方は自分で検索し、再実行するときは'u 89 ab'というデータを一度に解析するので、Unicodeエスケープ文字として正しく認識でき、このUnicode文字を正しく出力することができます.
表現力が限られていて、詳しい言葉で説明しようと努力していますが、ちょっと分かりにくいと思います.窓紙を1枚重ねれば,1筒で破れてしまう.
実はもう一つのアルゴリズムの性能はもっと良いと思います.Unicode文字を変数に直接入力し、eval変換を使わずに直接出力することができます.このレンガを投げて玉を引くのは、さらなる研究が必要です.
更新
新しいアルゴリズムは、パフォーマンスが向上する可能性があります.まずコードをつけます.
1 var theString = '';
2 for (var t = 0; t < 65536; t++) {
3 theString += String.fromCharCode(t)
4 }
5 document.write(theString);
はい!君は見間違えていない.これはクリップではありません!これはすべてのJSコードです!この数行しかありません!
Stringオブジェクトのドキュメントをよく見てからStringがあることがわかりました.fromCharCode()という神器は、具体的なドキュメントは自分で探しました.ははは、私を吹き飛ばさないでください.性能が分からない.
本文章は著作権法によって保護され、著作者の同意を得ずに盗用してはならない.この文章の内容を使用または引用するには、著者名、元の住所を明記してください.http://www.cnblogs.com/libook