Unicode 文字は一意のバイナリ表現を持つ必要がないため (UTF-8 などのエンコーディングに依存します)、「バイナリに戻って」と言うのは完全に正しいわけではないことに注意してください。ただし、ほとんどの UTF-... エンコーディングは、バイナリ エンコーディングに関して相互に下位互換性があると思います。
しかし、使用しているエンコーディングを気にしないと述べたので、Kolink が言ったとおりに行うことができます (彼の答えは不適切に反対票を投じられましたが、完全ではありませんでした):
編集: Esailja が指摘するように、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":
"\uD83C\uDCC1"==""
charCodeAt が、ある程度の作業なしで必要な数値を提供すると仮定することはできません。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 進文字列、さらには整数表現を使用できます。より単純な表現が必要になる可能性が高くなります。
完全な補足: オブジェクトをルックアップ テーブルとして使用する予定がある場合は、元の元の文字列 "" をキーとして使用できますtable={}; table[""]='something'; table[""]
。ただし、Unicode 3.2 標準には 95156 文字あるため、メモリ内でそのようなことを行うことはお勧めしません。また、あなたはルックアップ テーブルのパフォーマンスに慣れていないのではないかと思わせるようなことも言いましたtable[...]
。