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".


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);

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": ""
}

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.


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);

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)

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

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);  // '�'

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>


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.


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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.