귀하는 로그인되어 있지 않습니다. 이대로 편집하면 귀하의 IP 주소가 편집 기록에 남게 됩니다.스팸 방지 검사입니다. 이것을 입력하지 마세요!=== 인코딩 과정 === # '''문자 분리''': 입력 문자열에서 ASCII(기본) 문자와 비ASCII 문자를 분리한다. # '''기본 문자 처리''': ASCII 문자들은 그대로 유지한다. # '''비ASCII 문자 인코딩''': 비ASCII 문자들은 델타 인코딩(bootstring 알고리즘)을 이용해 변환한다. # '''최종 조합''': 기본 문자와 인코딩된 비ASCII 문자들을 하이픈(-) 등으로 결합한 후 '''xn--''' 접두어를 붙여 최종 결과를 만든다. 다음은 실제 RFC3492 알고리즘의 복잡한 모든 예외를 처리하지 않은, 단순화된 의사코드 예시이다: <syntaxhighlight lang="javascript"> // 단순화된 퓨니코드 변환 예시 (모든 예외 처리를 포함하지 않음) function processPunycode(input) { // 1. ASCII(기본) 문자와 비ASCII 문자 분리 const basicChars = input.match(/[\x00-\x7F]+/g) || []; const nonBasicChars = input.match(/[^\x00-\x7F]+/g) || []; // 2. 기본 문자는 그대로, 비ASCII 문자들은 별도 인코딩 let result = basicChars.join(''); if (nonBasicChars.length > 0) { result += '-' + encodeDelta(nonBasicChars); } // 3. ACE 접두어 추가 return 'xn--' + result; } // 비ASCII 문자에 대한 델타 인코딩 (의사코드) function encodeDelta(chars) { let n = 0x80; // 초기 기본값 let delta = 0; let bias = 72; // 초기 bias 값 let result = ''; for (let char of chars) { const point = char.codePointAt(0); delta += (point - n) * (delta + bias); n = point; while (delta > 0) { const t = Math.min(delta, 36); result += encodeDigit(t); delta = Math.floor(delta / 36); } } return result; } // 인코딩 시 숫자를 문자로 매핑하는 단순 예시 함수 function encodeDigit(digit) { // 0~25는 a-z, 26~35는 0-9에 매핑 (예시) if (digit < 26) { return String.fromCharCode(97 + digit); } else { return String.fromCharCode(48 + (digit - 26)); } } </syntaxhighlight> ''※ 위 코드는 RFC3492의 복잡한 알고리즘을 단순화한 의사코드임을 유의한다.'' 편집 요약 가온 위키에서의 모든 기여는 크리에이티브 커먼즈 저작자표시-동일조건변경허락 라이선스로 배포된다는 점을 유의해 주세요(자세한 내용에 대해서는 가온 위키:저작권 문서를 읽어주세요). 만약 여기에 동의하지 않는다면 문서를 저장하지 말아 주세요. 또한, 직접 작성했거나 퍼블릭 도메인과 같은 자유 문서에서 가져왔다는 것을 보증해야 합니다. 저작권이 있는 내용을 허가 없이 저장하지 마세요! 취소 편집 도움말 (새 창에서 열림)