2016-07-11 2 views
0

2 년 후에이 주제로 돌아오고 같은 주제에 대해 토론하는 사람들을 볼 수있다. 나는 아직도 무슨 일이 일어나고 있는지 이해하지 못한다.나는 컴퓨팅/자바 스크립트의 문자열을 바이트로 이해하지 못한다.

SO 게시물이 다음

String length in bytes in JavaScript

내가 자바 스크립트의이 부분을 이해하고 싶다! 또한 블록 체인으로 보내기 전에 bitcoin 트랜잭션의 kb 크기를 계산하는 데 관심이 있습니다. 이 둘 중 더 중요한 것은 결국 사용자가 한 번 이상 올 수 있기 때문에 마침내 이해할 수 있다는 것입니다.

것은 내가 대답으로 설명 된 기능의 세 가지 시도했지만 모두 내가 다른 값 (바이트 문자열의 오버 헤드를 반환하도록 기대하는 반면 또한 string.length을 돌아보다/아무것도 더 많은 일을 할 것 같다 킬로바이트/메가 바이트)

function byteCount(s) { 
    return encodeURI(s).split(/%..|./).length - 1; 
    } 

console.log(byteCount('hello'),'hello'.length);//5,5 


function getLengthInBytes(str) { 
    var b = str.match(/[^\x00-\xff]/g); 
    return (str.length + (!b ? 0: b.length)); 
    } 

console.log(getLengthInBytes('hello'),'hello'.length);//5,5 


console.log((new TextEncoder('utf-8').encode('hello')).length,'hello'.length);//5,5 

이것은 나에게 의미가 없다는 것은 짜증나! 분명히이 사람들은 string.length 으로 쉽게 얻을 수있는 것을 얻는 방법에 대해 이야기하지 않을 것입니다. 그래서 그들은 무엇을 시도하고 무엇을 되찾고 있습니까?

대신 문자열이 바이너리이어야합니까? (다음과 같이 : How to convert text to binary code in JavaScript?)

+1

1 바이트 이상의 공백이있는 특수 문자가 있습니다. "Äpfel"을 시도하십시오. UTF에 대한 위키 피 디아의 기사에서이 작업의 방법을 설명합니다. –

+0

Jup i 응답으로 작성했습니다. –

+0

JavaScript는 유니 코드 1.1이되었으며 16 비트 (2 바이트) 인코딩 만 허용하는 표준 인 UCS-2를 사용합니다. 최근 버전의 유니 코드는 문자 당 7 * 바이트를 실제로 사용할 수 있습니다. https://mathiasbynens.be/notes/javascript-unicode –

답변

1

는 세계에서 다른 부호가 많이 있습니다. 그들은 1 바이트의 데이터에 적합하지 않습니다. 그 이유는 일부 문자는 1 바이트 이상의 데이터를 사용하기 때문입니다. 몇 가지 예 : "Äüöôś"

+0

참고 : 내부 JavaScript는 문자 당 2 바이트를 사용하지만 문자 하나는 사용하지 않습니다. 그것은 UTF-16을 사용할 수있게 해줍니다 ... –

+0

잘 알고 있습니다. 감사 –

1

당신은 기본 ascii 문자로 테스트하고 있습니다. (글쎄, 그들은 utf8입니다. 그러나 ascii와 비슷하게 생각할 수 있으며,이 두 문자 모두에서 매우 유사하게 작동합니다). 확장 된 문자로 시도하십시오.

console.log((new TextEncoder('utf-8').encode('')).length, ''.length);

관련 문제