ユニコード文字はユニークなバイナリ表現を必要としないので(「UTF-8」などのエンコードによって異なります)、「バイナリとバック」と言うのはまったく正しいとは限りません。しかし、私は、UTF -...エンコーディングの大部分は、バイナリエンコーディングに関して互いに後方互換性があると信じています。
しかし、あなたはKolinkが言ったように、あなたが正確に行うことができます、あなたが使用しているエンコーディングを気にしない(彼の答えは不適切downvotedましたが、また、完成されなかった)ことを述べているので:
編集:として、 Esailija氏は、OPは基本的な多言語プレーン文字にしか関心がなく、1つのコードポイントしか持たないことを指摘しています。以下のコードは残念ですが、BMPコードと非BMPコードポイントの両方で動作します。
"some string".charCodeAt
は、コード化のコードポイントの16進数を示します。私のケースでは、UTF-16である:
"".charCodeAt(0)==55356
"".charCodeAt(1)==56513
でUTF-16本である0xF0 0x9F 0x83 0x81
(f09f8381
)、または "\ uD83C \ uDCC1":あなただけのcharCodeAtが与えると仮定することはできません
"\uD83C\uDCC1"==""
多少の作業をせずに必要な番号を入力してください。 Unicodeは可変幅のエンコーディングです。したがって、次のことを実行して自己一貫性のある結果を得ることができます。
var UTF_BITS = 16;
function padLeftTo(string, padChar, numChars) {
return (new Array(numChars-string.length+1)).join(padChar) + string;
}
function unicodeToBinary(char) {
return char.split('').map(function(codepoint) {
return padLeftTo(codepoint.charCodeAt(0).toString(2), 0, UTF_BITS);
}).join('').split('').map(function(char){return parseInt(char)});
// ^^^^(ignore this part if you just want a string)^^^^
}
function binaryToUnicode(binaryList) {
var codepointsAsNumbers = [];
while(binaryList.length>0){
var codepointBits = binaryList.slice(0,UTF_BITS);
binaryList = binaryList.slice(UTF_BITS);
codepointsAsNumbers.push(parseInt(codepointBits.join(''),2));
}
return String.fromCharCode.apply(this,codepointsAsNumbers);
}
デモ:
> unicodeToBinary("")
[1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1]
> binaryToUnicode(unicodeToBinary(""))
""
あなたのユースケースは、バイナリは、あなたが望む本当に何ではないかもしれませんだったか言わなかったので、それを注意してください。たとえば、一意の識別子を持つコンテンツの場合は、文字列自体、または16進文字列や整数表現を使用することができます。あなたがより簡単な表現を望む可能性は非常に高いです。
完全なsidenote:ルックアップテーブルとしてオブジェクトを使用する予定がある場合は、オリジナルの元の文字列「 "」をキーとして使用できます。 table={}; table[""]='something'; table[""]
。しかし、Unicode 3.2標準には95156文字があるので、私はそのようなことをメモリ上で行うことを勧めません。あなたはまた、あなたがルックアップテーブルのパフォーマンスに慣れていないと思うと言ったことも言った。あなたが気づいていなかった場合には、table[...]
をO(1)回実行する。
BMPのユニコード文字はどういう意味ですか? – Esailija
@Esailija、http://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane –
そして 'String.fromCharCode(" .charCodeAt(0)) 'の何が問題なのですか? – Esailija