ජාවාස්ක්‍රිප්ට් හි අක්‍ෂරය ASCII කේතයට පරිවර්තනය කරන්න


976

ජාවාස්ක්‍රිප්ට් භාවිතයෙන් අක්‍ෂරයක් එහි ASCII කේතයට පරිවර්තනය කරන්නේ කෙසේද?

උදාහරණයක් වශයෙන්:

"\ n" වෙතින් 10 ක් ලබා ගන්න.


12
බොහෝ පිළිතුරු වල යෝජනා කර ඇති String.prototype.charCodeAt () ක්‍රමය මඟින් UTF-16 කේත ඒකකය ( historical තිහාසික හේතූන් මත සම්පූර්ණ නිසි UTF-16 කේතන ක්‍රමය පවා නොලැබේ). ASCII අක්ෂර කේතීකරණයේ match ජු ගැලපීමක් වන්නේ පළමු යුනිකෝඩ් කේත ලකුණු 128 පමණි.
ඇල්වාරෝ ගොන්සාලෙස්

Answers:


1487
"\n".charCodeAt(0);

676
මෙහි ප්‍රතිවිරුද්ධ දෙයයි String.fromCharCode(10).
viam0Zah

188
විනෝදජනක කාරණය: ඔබට 0(පළමු තර්ක අගය) ඇත්ත වශයෙන්ම අවශ්‍ය නොවේ "\n".charCodeAt().
මතියස් බයිනස්

48
@MathiasBynens: හා වාසනාවකට මෙම ලේඛනගතව ඇත: developer.mozilla.org/en/JavaScript/Reference/Global_Objects/... . "එය අංකයක් නොවේ නම්, එය පෙරනිමියෙන් 0 වේ"
ටොක්ලන්ඩ්

12
ඔබ මෙන් නොව බව පෙන්වා යුතු String.fromCharCode( asciiNumVal ), stringInstance.charCodeAt( index )වේ නොහැකි පන්ති, සංගීත ස්ථිතික ක්රමය
bobobobo

26
Ati මතියස් බයිනන්ස්, එය නිසැකවම ශුන්‍යයට පෙරනිමියෙන් සිදු කරයි, නමුත් මම කාර්ය සාධනය පිළිබඳ පොලී පරීක්‍ෂණයකින් තොර වූ අතර එය 0 භාවිතා කිරීම සාපේක්ෂව ** නරක ලෙස සිදු කරයි. Jsperf.com/default-to-0-vs-0/4 ** එය සාපේක්ෂ වෙනසක් පමණි, එක්කෝ එය ඉතා ඉක්මන් වේ.
wade montague

396

String.prototype.charCodeAt()සංගීත අක්ෂර ASCII අංක බවට පරිවර්තනය කළ හැකිය. උදාහරණයක් වශයෙන්:

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

ප්‍රතිවිරුද්ධ භාවිතය String.fromCharCode(10)සඳහා සංඛ්‍යා සමාන ASCII අක්ෂර බවට පරිවර්තනය කරයි. මෙම ශ්‍රිතයට බහුවිධ සංඛ්‍යා පිළිගෙන සියලු අක්ෂර සමඟ සම්බන්ධ වී නැවත නූල ලබා දිය හැකිය. උදාහරණයක්:

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

මෙන්න ඉක්මන් ASCII අක්ෂර යොමුව:

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

31
වඩා හොඳ ascii යොමුව: en.wikipedia.org/wiki/ASCII - එම පිටුවේ ඇති වගු සඳහා මා විසින් වර්ණ ගැන්වීම වසර 10 කට ආසන්න කාලයක් ගතවී තිබීම ගැන මම ආඩම්බර වෙමි :)
BT

9
GtheGrayFox C:\> man asciiලබා දෙයිBad command or file name
e2-e4

මෙම ක්‍රම UTF-16 අනුකූල වන බව සලකන්න, එහි අර්ථය ආදාන නූල අනුව, charCodeAt ට බයිට් 1 පසුකර ASCII අගයන් 0-127 දක්වා දිගු කළ හැකිය. අත්තනෝමතික නූල් ආදානය ජාවාස්ක්‍රිප්ට් විසින් පිළිගෙන හසුරුවන්නේ නම් එය එම පරාසය තුළ ඇතැයි නොසිතන්න.
theferrit32

31

ඔබට ඇත්තේ එක් වර්‍ගයක් මිස නූලක් නොවේ නම්, ඔබට මෙය භාවිතා කළ හැකිය:

'\n'.charCodeAt();

0 මඟ හැරීම ...

එය මන්දගාමී වුවද. ක්‍රෝම් හි වර්තමාන අනුවාදය සමඟ එය 5 ගුණයකින් මන්දගාමී වේ.


10
මෙය ඇත්ත වශයෙන්ම වැඩි කාලයක් ගතවේ. ශුන්‍යය භාවිතා කිරීම වේගවත් ය. (මගේ පරිගණකයේ, එය නැවත නැවත දසදහසක් හරහා ~ 0.055s එදිරිව 0.126s මෙන් දෙගුණයක් දිගු විය)
royhowie

25

අනෙක් පිළිතුරු නිවැරදි වුවත්, මම මේ ආකාරයට කැමතියි:

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

පසුව, එය භාවිතා කිරීමට, සරලව:

var lineBreak = ascii("\n");

මම මෙය කුඩා කෙටිමං පද්ධතියක් සඳහා භාවිතා කරමි:

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

ඔබට එය සිතියම () හෝ වෙනත් ක්‍රම තුළ පවා භාවිතා කළ හැකිය:

var ints = 'ergtrer'.split('').map(ascii);

අලංකාරය සඳහා එය ලිවීමට නව ES6 ක්‍රමයක්: const ascii = a => a.charCodeAt(0);
axkibe

20

නූලක් සඳහා සියලුම ASCII කේතවල එකතුවක් ලබා ගැනීමට කැමති අය සඳහා:

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

හෝ, ES6:

[...'Foobar']
  .map(char => char.charCodeAt(0))
  .reduce((current, previous) => previous + current)

1
ඔබගේ අවසාන පේළිය දෙවරක් පරීක්ෂා කරන්න.
Ypnypn

අලංකාරයි! ශ්‍රිතයක් ලෙස: ශ්‍රිතය ascii (str) {return str .split ('') .map (function (char) {return char + ":" + String (char.charCodeAt (0)) + "\ n";}) .reduce (ශ්‍රිතය (වත්මන්, පෙර) {ආපසු ධාරාව + පෙර;}); }
ඩැරන් ග්‍රිෆිත්

2
[...'Foobar'].reduce((i,s)=>s.charCodeAt(0)+i,0)
නික්

3
සියලුම ASCII කේතවල එකතුව කිසිවෙකු නූලකින් ඉල්ලා නොසිටි අතර කිසි විටෙකත් එසේ කිරීමට අපහසුය.
කාල් ස්මිත්

8

ජාවාස්ක්‍රිප්ට් නූල් UTF-16(ද්විත්ව බයිට්) ලෙස ගබඩා කරයි, එබැවින් ඔබට දෙවන බයිට් නොසලකා හැරීමට අවශ්‍ය නම් එය බිට්වේස් &ක්‍රියාකරු සමඟ 0000000011111111(එනම් 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

දෙවන බයිටය නොසලකා හැරීමට ඔබට අවශ්‍ය ඇයි?
රොබර්ග්

3
යූටීඑෆ් -16 නූලකින් (ද්විත්ව බයිට්) ASCII නිෂ්පාදනය කිරීම පිළිබඳව ප්‍රශ්නය අසයි. දෙවන බයිටය නොසලකා හැරීමට අපොහොසත් වුවහොත් ඉක්මනින් හෝ පසුව ඔබට ඇස්කි නොවන කේත ලැබෙනු ඇත.
ස්ටීවන් ද සලාස්

1
E ස්ටීවන් ඩි සලාස් - ASCII නොවන අක්ෂර සඳහා ASCII නොවන කේත ලබා ගැනීම සඳහා ඔබේ 'විසඳුම' වන්නේ වැරදි ASCII කේතය ආපසු ලබා දීමද ??
කාල් ස්මිත්

Ar කාල්ස්මිත් මිස වැරදි එකක් නොවේ. අක්‍ෂරයේ අස්ථි නොවන සං component ටකය ඉවත් කිරීමට පමණි. ඔබ තනි බයිට් සමඟ වැඩ කරන්නේ නම් මෙය ප්‍රයෝජනවත් වේ. ඔබේ ව්‍යාපෘතියට වෙනස් විසඳුමක් අවශ්‍ය විය හැකිය.
ස්ටීවන් ඩි සලාස්

4

සම්පූර්ණ යුනිකෝඩ් සහාය සහ ආපසු හැරවීමේ හැකියාව සහතික කිරීම සඳහා, භාවිතා කිරීම සලකා බලන්න:

'\n'.codePointAt(0);

UTF-16 සීමාව ඉක්මවා අක්ෂර පරික්ෂා කිරීමේදී ඔබට ඒවායේ සත්‍ය කේත ලක්ෂ්‍ය අගය ලැබෙනු ඇති බවට මෙය සහතික වේ.

උදා

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

'𐩕'.charCodeAt(0);  // 55298
String.fromCharCode(55298);  // '�'

සමහර අක්ෂර සංස්කාරකවරුන් එවැනි චරිත සමඟ කෙලින්ම ගනුදෙනු කිරීම නිසි ලෙස ක්‍රියා නොකරනු ඇති බැවින් විශේෂ අක්‍ෂරය හෙක්ස් අංකනය බවට පරිවර්තනය කිරීම ද ප්‍රයෝජනවත් විය හැකිය. EG: ඇඟවීම් (str.hexEncode (). HexDecode ());
ජෝස් ටෙපෙඩිනෝ

2

ඔබට මෙම කේතය භාවිතා කර අක්‍ෂරයක් ඇතුළත් කර Ascii කේතය ලබා ගත හැකිය

උදාහරණයක් ලෙස ඔබට Ascii කේතය 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

ES6 වෙතින් සියලුම UTF-16 ( BMP නොවන / අතිරේක අක්ෂර සඳහා ) සහය දැක්වීම සඳහා string.codePointAt () ක්‍රමය ඇත;

මෙම ක්‍රමය charCodeAt හි වැඩිදියුණු කළ අනුවාදයක් වන අතර එය යුනිකෝඩ් කේත ලක්ෂ්‍යයන්ට පමණක් සහාය විය හැකිය <65536 (2 16 - තනි 16bit).


4
එය වටිනා බව සඳහන් වේ String.prototype.codePointAt()වේ මඟින් පහසුකම් සපයන්නේ නැත කිසිදු Internet Explorer හි සංස්කරණ . (කෙසේ වෙතත් එය එජ් හි සහය දක්වයි.) ඔබට මෙහි පොලිෆිල් එකක් ලබා ගත හැකිය .
mgthomas99

0
str.charCodeAt(index)

CharCodeAt භාවිතා කිරීම () පහත උදාහරණයෙන් 65, A සඳහා යුනිකෝඩ් අගය ලබා දෙයි.

'ABC'.charCodeAt (0) // ආපසු 65

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.