Konvertieren Sie Zeichen in ASCII-Code in JavaScript

952

Wie kann ich ein Zeichen mit JavaScript in seinen ASCII-Code konvertieren?

Zum Beispiel:

Holen Sie sich 10 von "\ n".

Levik
quelle
10
Bitte beachten Sie, dass die in den meisten Antworten vorgeschlagene Methode String.prototype.charCodeAt () die UTF-16- Codeeinheit zurückgibt (aus historischen Gründen nicht einmal die vollständige ordnungsgemäße UTF-16-Codierung). Nur die ersten 128 Unicode-Codepunkte stimmen direkt mit der ASCII-Zeichencodierung überein.
Álvaro González

Antworten:

1448
"\n".charCodeAt(0);
Jim
quelle
658
Das Gegenteil davon ist String.fromCharCode(10).
viam0Zah
184
Lustige Tatsache: Sie brauchen den 0(ersten Argumentwert) nicht wirklich - das reicht einfach "\n".charCodeAt().
Mathias Bynens
47
@MathiasBynens: und zum Glück ist dies dokumentiert: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/… . "Wenn es keine Zahl ist, ist es standardmäßig 0"
tokland
12
Sie sollen darauf hinweisen , dass im Gegensatz zu String.fromCharCode( asciiNumVal ), stringInstance.charCodeAt( index )ist nicht eine statische Methode der Klasse String
bobobobo
26
@Mathias Bynens, es ist sicherlich standardmäßig Null, aber ich habe gerade einen Test durchgeführt, bei dem die Leistung nicht von Interesse ist, und die Leistung ist ** im Vergleich zu 0 relativ schlecht. Jsperf.com/default-to-0-vs-0/4 ** Es ist nur ein relativer Unterschied, so oder so ist es sehr, sehr schnell.
Wade Montag
385

String.prototype.charCodeAt()kann Zeichenfolgen in ASCII-Zahlen konvertieren. Zum Beispiel:

"ABC".charCodeAt(0) // returns 65

Bei umgekehrter Verwendung werden String.fromCharCode(10)Zahlen in gleiche ASCII-Zeichen konvertiert. Diese Funktion kann mehrere Zahlen akzeptieren, alle Zeichen verbinden und dann die Zeichenfolge zurückgeben. Beispiel:

String.fromCharCode(65,66,67); // returns 'ABC'

Hier ist eine kurze Referenz zu ASCII-Zeichen:

{
"31": "",      "32": " ",     "33": "!",     "34": "\"",    "35": "#",    
"36": "$",     "37": "%",     "38": "&",     "39": "'",     "40": "(",    
"41": ")",     "42": "*",     "43": "+",     "44": ",",     "45": "-",    
"46": ".",     "47": "/",     "48": "0",     "49": "1",     "50": "2",    
"51": "3",     "52": "4",     "53": "5",     "54": "6",     "55": "7",    
"56": "8",     "57": "9",     "58": ":",     "59": ";",     "60": "<",    
"61": "=",     "62": ">",     "63": "?",     "64": "@",     "65": "A",    
"66": "B",     "67": "C",     "68": "D",     "69": "E",     "70": "F",    
"71": "G",     "72": "H",     "73": "I",     "74": "J",     "75": "K",    
"76": "L",     "77": "M",     "78": "N",     "79": "O",     "80": "P",    
"81": "Q",     "82": "R",     "83": "S",     "84": "T",     "85": "U",    
"86": "V",     "87": "W",     "88": "X",     "89": "Y",     "90": "Z",    
"91": "[",     "92": "\\",    "93": "]",     "94": "^",     "95": "_",    
"96": "`",     "97": "a",     "98": "b",     "99": "c",     "100": "d",    
"101": "e",    "102": "f",    "103": "g",    "104": "h",    "105": "i",    
"106": "j",    "107": "k",    "108": "l",    "109": "m",    "110": "n",    
"111": "o",    "112": "p",    "113": "q",    "114": "r",    "115": "s",    
"116": "t",    "117": "u",    "118": "v",    "119": "w",    "120": "x",    
"121": "y",    "122": "z",    "123": "{",    "124": "|",    "125": "}",    
"126": "~",    "127": ""
}
Mohsen
quelle
30
Bessere ASCII-Referenz: en.wikipedia.org/wiki/ASCII - Ich bin ziemlich stolz darauf, dass die Färbung, die ich für die Tabellen auf dieser Seite vorgenommen habe, nach fast 10 Jahren dort bleibt
BT
9
@theGrayFox C:\> man asciigibtBad command or file name
e2-e4
Beachten Sie, dass diese Methoden UTF-16-kompatibel sind. Dies bedeutet, dass charCodeAt je nach Eingabezeichenfolge weit über die 1-Byte-ASCII-Werte 0-127 hinausgehen kann. Gehen Sie nicht davon aus, dass es in diesem Bereich liegt, wenn eine beliebige Zeichenfolgeneingabe von Javascript akzeptiert und verarbeitet wird.
Theferrit32
31

Wenn Sie nur ein Zeichen und keine Zeichenfolge haben, können Sie Folgendes verwenden:

'\n'.charCodeAt();

Auslassen der 0 ...

Es ist jedoch langsamer. Mit der aktuellen Version von Chrome ist es 5-mal langsamer.

Marco Altieri
quelle
10
Dies dauert tatsächlich länger. Es ist schneller, nur die Null zu verwenden. (Auf meinem Computer dauerte es ~ doppelt so lange - 0,055s gegenüber 0,126s durch einige zehntausend Iterationen)
royhowie
23

Während die anderen Antworten richtig sind, bevorzuge ich diesen Weg:

function ascii (a) { return a.charCodeAt(0); }

Dann, um es zu benutzen, einfach:

var lineBreak = ascii("\n");

Ich benutze dies für ein kleines Verknüpfungssystem:

$(window).keypress(function(event) {
  if (event.ctrlKey && event.which == ascii("s")) {
    savecontent();
    }
  // ...
  });

Und Sie können es sogar in map () oder anderen Methoden verwenden:

var ints = 'ergtrer'.split('').map(ascii);
Francisco Presencia
quelle
Nur für die Schönheit eine neue ES6-Art, es zu schreiben: const ascii = a => a.charCodeAt(0);
Axkibe
20

Für diejenigen, die eine Summe aller ASCII-Codes für eine Zeichenfolge erhalten möchten:

'Foobar'
  .split('')
  .map(x=>x.charCodeAt(0))
  .reduce((a,b)=>a+b);

Oder ES6:

[...'Foobar']
  .map(char => char.charCodeAt(0))
  .reduce((current, previous) => previous + current)
Filip Dupanović
quelle
1
Überprüfen Sie Ihre letzte Zeile.
Ypnypn
Elegant! als Funktion: Funktion ascii (str) {return str .split ('') .map (Funktion (char) {return char + ":" + String (char.charCodeAt (0)) + "\ n";}) .reduce (Funktion (aktuell, vorhergehend) {Rückgabe aktuell + vorher;}); }
Darren Griffith
1
[...'Foobar'].reduce((i,s)=>s.charCodeAt(0)+i,0)
Nick
1
Niemand hat nach der Summe aller ASCII-Codes in einer Zeichenfolge gefragt, und es ist unwahrscheinlich, dass dies jemals der Fall ist.
Carl Smith
8

JavaScript speichert Zeichenfolgen als UTF-16(Doppelbyte). Wenn Sie also das zweite Byte ignorieren möchten, entfernen Sie es einfach mit einem bitweisen &Operator 0000000011111111(dh 255):

'a'.charCodeAt(0) & 255 === 97; // because 'a' = 97 0 
'b'.charCodeAt(0) & 255 === 98; // because 'b' = 98 0 
'✓'.charCodeAt(0) & 255 === 19; // because '✓' = 19 39
Steven de Salas
quelle
Warum sollten Sie das zweite Byte ignorieren wollen?
Roberg
3
Die Frage betrifft die Erzeugung von ASCII aus einer UTF-16-Zeichenfolge (Doppelbyte). Früher oder später erhalten Sie Nicht-ASCII-Codes, wenn Sie das zweite Byte nicht ignorieren.
Steven de Salas
1
@Steven de Salas - Ihre 'Lösung', um Nicht-ASCII-Codes für Nicht-ASCII-Zeichen zu erhalten, besteht darin, den falschen ASCII-Code zurückzugeben?
Carl Smith
@ CarlSmith, nicht der falsche. Nur um die Nicht-ASCII-Komponente des Charakters zu entfernen. Wenn Sie mit einzelnen Bytes arbeiten, ist dies nützlich. Ihr Projekt benötigt jedoch möglicherweise eine andere Lösung.
Steven de Salas
4

Verwenden Sie Folgendes, um vollständige Unicode-Unterstützung und Reversibilität sicherzustellen:

'\n'.codePointAt(0);

Dadurch wird sichergestellt, dass Sie beim Testen von Zeichen über dem UTF-16-Grenzwert ihren wahren Codepunktwert erhalten.

z.B

'𐩕'.codePointAt(0); // 68181
String.fromCodePoint(68181); // '𐩕'

'𐩕'.charCodeAt(0);  // 55298
String.fromCharCode(55298);  // '�'
Ibrahim Lawal
quelle
Es kann auch nützlich sein, das Sonderzeichen in eine Hexadezimalschreibweise umzuwandeln, da einige Texteditoren möglicherweise nicht ordnungsgemäß funktionieren und direkt mit solchen Zeichen umgehen müssen. EG: alert (str.hexEncode (). HexDecode ());
Jose Tepedino
2

Mit diesem Code können Sie ein Zeichen eingeben und Ascii-Code erhalten

Geben Sie zum Beispiel ein Zeichen wie A ein. Sie erhalten den Ascii-Code 65

function myFunction(){
    var str=document.getElementById("id1");
    if (str.value=="") {
       str.focus();
       return;
    }
    var a="ASCII Code is == >  ";
document.getElementById("demo").innerHTML =a+str.value.charCodeAt(0);
}
<p>Check ASCII code</p>

<p>
  Enter any character:  
  <input type="text" id="id1" name="text1" maxLength="1">	</br>
</p>

<button onclick="myFunction()">Get ASCII code</button>

<p id="demo" style="color:red;"></p>

Keshav Gera
quelle
1

Zur Unterstützung aller UTF-16 - Dateien ( auch Nicht-BMP- / Zusatzzeichen ) von ES6 steht die Methode string.codePointAt () zur Verfügung.

Diese Methode ist eine verbesserte Version von charCodeAt, die nur Unicode-Codepunkte <65536 (2 16 - ein einzelnes 16- Bit) unterstützen kann.

maioman
quelle
4
Es ist erwähnenswert , dass String.prototype.codePointAt()wird nicht unterstützt von allen Versionen von Internet Explorer . (Allerdings ist es auf Edge unterstützt.) Sie können eine polyfill bekommen hier .
mgthomas99