JavaScript에서 문자를 ASCII 코드로 변환


952

JavaScript를 사용하여 문자를 ASCII 코드로 변환하려면 어떻게해야합니까?

예를 들면 다음과 같습니다.

"\ n"에서 10을 얻습니다.


10
하십시오 참고 String.prototype.charCodeAt () 대부분의 답변에서 제안 방법은 반환 UTF-16 코드 단위 (때문에 역사적 이유조차 전체 적절한 UTF-16 인코딩을). 처음 128 개의 유니 코드 코드 포인트 만 ASCII 문자 인코딩과 직접 일치합니다.
Álvaro González

답변:


1448
"\n".charCodeAt(0);

658
이것의 반대는입니다 String.fromCharCode(10).
viam0Zah

184
재미있는 사실 : 실제로 0(첫 번째 인수 값) "\n".charCodeAt()이 필요하지는 않습니다.
Mathias Bynens

47
@MathiasBynens : 그리고 다행히도 이것은 developer.mozilla.org/en/JavaScript/Reference/Global_Objects/…에 문서화되어 있습니다. "숫자가 아닌 경우 기본값은 0입니다"
tokland

12
당신은 달리이 점을 지적해야한다 String.fromCharCode( asciiNumVal ), stringInstance.charCodeAt( index )입니다 하지 클래스 문자열의 정적 방법
bobobobo

26
@Mathias Bynens, 확실히 기본값은 0이지만 성능에 대해서는 관심이 거의없는 테스트를 실행 했으며 **는 0을 사용하여 비교할 때 상대적으로 나쁘게 수행합니다. jsperf.com/default-to-0-vs-0/4 ** 그것의 상대적인 차이는 매우 빠릅니다.
wade montague

385

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

30
더 나은 ascii 참조 : en.wikipedia.org/wiki/ASCII- 나는 그 페이지의 테이블에 대해 한 착색이 거의 10 년 후에도 남아 있다고 자랑스럽게 생각합니다
BT

9
@theGrayFox가 C:\> man ascii제공하는Bad command or file name
e2-e4

이러한 메소드는 UTF-16과 호환되므로 입력 문자열에 따라 charCodeAt가 1 바이트 ASCII 값 0-127을 훨씬 초과하여 확장 될 수 있습니다. 임의의 문자열 입력이 javascript에 의해 처리되고 처리되는 경우 해당 범위에 있다고 가정하지 마십시오.
theferrit32

31

문자열이 아닌 문자가 하나만 있으면 다음을 사용할 수 있습니다.

'\n'.charCodeAt();

0을 생략하고 ...

그래도 느립니다. 현재 크롬 버전에서는 5 배 느립니다.


10
실제로 시간이 더 걸립니다. 0을 사용하는 것이 더 빠릅니다. (내 컴퓨터에서는 수만 번 반복하여 0.055 초 대 0.126 초 ~ 2 배가 걸렸습니다)
royhowie

23

다른 답변은 옳지 만 다음과 같이 선호합니다.

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

그런 다음 간단히 사용하십시오.

var lineBreak = ascii("\n");

작은 단축 시스템에 이것을 사용하고 있습니다 :

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

그리고 map () 또는 다른 메소드에서도 사용할 수 있습니다.

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

우아한! 함수로서 : function ascii (str) {return str .split ( '') .map (function (char) {return char + ":"+ String (char.charCodeAt (0)) + "\ n";}) .reduce (함수 (현재, 이전) {return current + previous;}); }
대런 그리피스

1
[...'Foobar'].reduce((i,s)=>s.charCodeAt(0)+i,0)
Nick

1
아무도 문자열에서 모든 ASCII 코드의 합계를 요구하지 않았으며 그렇게 할 가능성은 거의 없습니다.
Carl Smith

8

JavaScript는 문자열을 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

왜 두 번째 바이트를 무시하고 싶습니까?
Roberg

3
UTF-16 문자열 (더블 바이트)에서 ASCII를 생성하는 것에 대한 질문입니다. 조만간 두 번째 바이트를 무시하지 않으면 ASCII가 아닌 코드가 표시됩니다.
Steven de Salas

1
@Steven de Salas-비 ASCII 문자에 대한 비 ASCII 코드를 얻는 '솔루션'은 잘못된 ASCII 코드 를 반환하는 것입니다 ??
Carl Smith

@CarlSmith, 잘못된 것이 아닙니다. 캐릭터의 ASCII가 아닌 구성 요소를 제거하십시오. 단일 바이트로 작업하는 경우 유용합니다. 그러나 프로젝트에 다른 솔루션이 필요할 수 있습니다.
Steven de Salas

4

완전한 유니 코드 지원 및 가역성을 보장하려면 다음을 사용하십시오.

'\n'.codePointAt(0);

이렇게하면 UTF-16 제한을 초과하는 문자를 테스트 할 때 실제 코드 포인트 값을 얻을 수 있습니다.

예 :

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

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

일부 문자 편집기는 이러한 문자를 직접 처리하지 않아도 제대로 작동하지 않을 수 있으므로 특수 문자를 16 진 표기법으로 변환하는 것이 유용 할 수도 있습니다. EG : alert (str.hexEncode (). hexDecode ());
호세 테페 디노

2

이 코드를 사용하여 문자를 입력하고 아스키 코드를 얻을 수 있습니다

예를 들어 A와 같은 문자 입력 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

ES6에서 모든 UTF-16 ( 비 BMP / 보조 문자 )을 지원하기 위해 string.codePointAt () 메소드를 사용할 수 있습니다.

이 메소드는 개선 된 charCodeAt 버전으로 65536 (2 16- 단일 16 비트)의 유니 코드 코드 포인트 만 지원할 수 있습니다.


4
그것은 언급 할만큼 가치입니다 String.prototype.codePointAt()되어 지원하지 않는 모든 Internet Explorer 버전 . (그러나 Edge에서 지원됩니다.) 여기 에서 폴리 필을 얻을 수 있습니다 .
mgthomas99
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.