UTF-8, UTF-16, UTF-32 Charset for Korean language 패치 (euphony.js) #97
Replies: 7 comments 8 replies
-
자세한 설명과 정리 감사합니다! |
Beta Was this translation helpful? Give feedback.
-
정리감사합니다 !!!! 분기를 어디서 하면 좋을까요 ,, !! |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
https://github.com/euphony-io/euphony.js/discussions |
Beta Was this translation helpful? Give feedback.
-
설명 감사드립니다!! 👍 |
Beta Was this translation helpful? Give feedback.
-
정리 감사드립니다! |
Beta Was this translation helpful? Give feedback.
-
UTF-32 변환하는 코드 작성했습니다! setCode: function (data) {
const T = this;
/* 1) Ss is starting buffer to use trigger point
S includes starting buffer with crossfade effect.
s is only starting buffer.
*/
let code = 'Ss';
/* 2) Generate pure data code */
let dataCode = '';
for (let i = 0; i < data.length; i++) {
let nowChar = data.charCodeAt(i).toString(16);
let u32 = nowChar;
for(let j = nowChar.length; j < 8; j++)
u32 = '0' + u32;
console.log("" + i + " : " + u32);
dataCode += u32;
}
code += dataCode;
console.log("result : " + code);
/* 3) Generate checksum & parity code */
code += T.makeChecksum(dataCode).toString(16);
code += T.makeParallelParity(dataCode);
/* 4) Setting Euphony Code */
T.setInnerCode(code);
/* 4) copy playBuffer to web audio buffer to use Web Audio API */
T.applyAudioBuffer();
} 변환하는 과정에서 문자를 하나하나 찍어서 결과를 보일 수 있게 했습니다. |
Beta Was this translation helpful? Give feedback.
-
게시글 euphony.js로 이동하였습니다!
링크에서 토론해주세요!
Charset 지원을 위해 수정해야 할 부분은 setCode으로 보입니다.
setCode 함수를 살펴보면 주어진 문자열 data에서 각 문자의 코드포인트(정수)를 구하고, 이를 16진수 문자열로 바꿔서 인코딩하고 있습니다. 구체적으로는 charCodeAt 메소드를 이용하는데 이 메소드는 문자의 UTF-16 표현을 정수로 반환합니다. 이 정수는 0x0000 ~ 0xFFFF 범위에서 코드포인트와 동일하기 때문에 ASCII 번호와도 일치합니다. 만약 이 정수를 UTF-16으로 나타내려면 정수로 된 문자의 UTF-16 표현을 .toString 메소드를 통해, 16진수 문자열로 바꾸고 문자열의 길이가 4가 되도록 패딩을 앞에 넣어야 합니다.
(s.charCodeAt(i) 는 문자열 s의 i번째 문자의 UTF-16 표현 (정수) 입니다)
보시면 이모지 같은 경우에는 2바이트로 나타낼 수 없는 영역에 속한 문자라서 2개로 나타냅니다. (UTF-16과 동일한 방식)
저희는 기본 다국어 평면 (BMP) 상의 문자만 구현할 예정이므로 이모지는 고려하지 않으셔도 될 것 같습니다.
16진수로 인코딩한 문자열은 setInnerCode를 통해 buffer에 저장됩니다. 이 부분은 특별히 수정하지 않아도 될 것 같네요.
별도로 Charset 클래스가 존재하는 것이 아니라서 결정해야 할 부분은 UTF-8, UTF-16, UTF-32 를 어디서 분기하느냐 일 것 같습니다. 단순하게 setCode에 flag 형태로 인자를 줄 수도 있을 것 같고 별개의 함수로 만들 수도 있을 것 같습니다.
의견 부탁드립니다!
https://github.com/euphony-io/euphony.js/blob/ef4f575bc67c0450899f2b9a0a518e846296343a/euphony.js
Beta Was this translation helpful? Give feedback.
All reactions