unicode Binär?
In Javascript, wie kann ich konvertieren von BMP unicode-Zeichen in binäre (und zurück)?
Ich kann nicht scheinen zu finden, built-in string-Methode binaryCharCodeAt()
kommt soetwas existieren?
Wenn nicht, meine Vermutung, wie es manuell zu tun wäre, um erstellen Sie ein array, zum Beispiel [00001111], [00001110], [00001100]
und so weiter...
Dann bekommen binäre, könnte ich myArray[String.charCodeAt(j)]
Dann von Binär in unicode, ich konnte Suche dem array für ein Binär-string, der Rückkehr seine position in dem array, und legen Sie, dass in String.fromCharCode()
In diesem Fall, diese binäre codes sind willkürlich zugewiesen, und nicht die richtigen sind für jeden Charakter. Aber das ist ok.. (obwohl korrekt wäre bevorzugt) brauche ich nur jedem binären.
Das problem, das ich sehe ist, zu suchen, ein array mit 65000+ Objekte, Hunderte oder Tausende Male, könnte am Ende kostet eine Menge Rechenzeit.
So ist, gibt es eine bereits bestehende Methode oder der Bibliothek, oder können Sie mir einen besseren Weg, um dies manuell zu tun?
- was meinst du mit BMP-unicode-Zeichen?
- en.wikipedia.org/wiki/Plane_(Unicode)#Basic_Multilingual_Plane
- Und was ist falsch mit
String.fromCharCode( "a".charCodeAt(0) )
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Tun, beachten Sie, dass es nicht ganz korrekt zu sagen, "Binär-und zurück", weil die unicode-Zeichen nicht brauchen, um eine einzigartige binäre Darstellung (es hängt von der Kodierung z.B. UTF-8). Aber ich glaube, die meisten von UTF -... - Codierungen sind rückwärts-kompatibel mit jedem anderen in Bezug auf binäre Codierungen.
Aber da du sagtest, dass du egal mit welchem encoding Sie verwenden, können Sie genau das tun, was Kolink sagte (seine Antwort war falsch downvoted, aber war auch nicht vollständig):
edit: Als Esailija Punkte aus, die OP war nur daran interessiert, die basic multilingual plane Zeichen, die nur einen codepoint. Der code unten ist auch zuviel, obwohl noch Arbeit auf beiden BMP-und nicht-BMP-codepoints.
"some string".charCodeAt
gibt Sie der Fluch des codepoints von einigen Kodierung. In meinem Fall ist es UTF-16:In UTF-16 dies ist
0xF0 0x9F 0x83 0x81
(f09f8381
), oder "\uD83C\uDCC1":Können Sie nicht einfach davon ausgehen, dass charCodeAt geben Sie die Nummer, die Sie wollen, ohne eine gewisse Menge an Arbeit. Unicode ist ein variable-width-encoding. Daher können Sie das folgende tun, um eine selbst-konsistente Ergebnis.
Demo:
Tun, beachten Sie, dass seit Sie nicht sagen, was Ihre Nutzung war der Fall, binäre möglicherweise nicht wirklich, was Sie wollen. Zum Beispiel, wenn Sie Inhalte mit eindeutigen Bezeichner, den Sie verwenden konnten, die Saiten selbst, oder als hex-string oder sogar integer-Darstellungen. Es ist viel wahrscheinlicher, Sie wollen eine einfachere Darstellung.
vollständige nebenbei bemerkt: Wenn Sie planen, ein Objekt zu verwenden, wie eine lookup-Tabelle, können Sie einfach die original-original-string "?" als Schlüssel, z.B.
table={}; table["?"]='something'; table["?"]
. Aber da gibt es 95156-Zeichen in den unicode-3.2-standard, ich würde nicht vorschlagen, tun so etwas in Erinnerung. Sie sagte auch etwas, was mich glaube, Sie waren nicht vertraut mit der Durchführung eines lookup-Tabelle: wenn Sie nicht bewusst waren, dauert es O(1) Zeit zu tuntable[...]
..charCodeAt
. Javascript verwendet UTF-16 (oder UCS2) durch Spezifikation. Sie können dies überprüfen, indem Sie ausführenvar l = 0x10000; while( l-- ) { console.log( String.fromCharCode(l).charCodeAt(0) === l ); }
Verwenden
charCodeAt
erhalten die Dezimalzahl, dann rufen SietoString(2)
auf Sie zu konvertieren Sie es in binäre..toString(2)
form nimmt 16 Byte Speicher und Bedürfnisse string-manipulation zu umgehen... man konnte nicht mehr unwirksam, auch wenn er es versuchte.0xFF
als string"11111111"
). Wenn er nicht erwähnt hat dies in seinem post würden Sie vermutlich Recht.