punycode 릴리즈 v0.15.0
Source: Dev.to
Background
GitHub 저장소들을 정리하려고 했는데, 오래된 이슈와 오래된 브랜치가 눈에 띄었습니다.
이슈 (#34)는 punycode와 특정 유니코드 문자, 특히 Zero Width Joiner (ZWJ)를 포함한 이모지와 관련된 문제를 다루고 있었습니다.
Issue Description
Problem:
Zero Width Joiner를 포함한 Punycodes/Emojis가 올바르게 처리되지 않습니다.
xn--8k8hlfr9n은 🧑🏾🎨이어야 하는데, 현재는 🧑🏾🎨로 표시됩니다.
🧑🏾🎨에 대한 punycode는xn--1ug6825plhas9r가 아니라xn--8k8hlfr9n이어야 합니다.
ZWJ는 여러 문자를 결합해 복합 문자를 만들 때 사용됩니다. 여기서는 기본 문자(🧑🏾)와 추가 문자(🎨)를 결합해 단일 복합 문자 🧑🏾🎨를 형성합니다.
Fix Implemented
기존 punycode 구현이 인코딩 및 디코딩 과정에서 ZWJ를 고려하지 않는다는 것을 발견했습니다. 인코딩과 디코딩 함수를 수정하여 ZWJ를 올바르게 처리하도록 변경했습니다.
Testing
변경 후 ZWJ를 포함한 다양한 입력으로 업데이트된 구현을 테스트했습니다. 테스트 결과 이슈가 해결되었으며 올바른 punycode 표현이 생성되는 것을 확인했습니다.
Updated CLI Output
최신 업데이트로 CLI가 기대한 결과를 출력합니다.
./punycode xn--8k8hlfr9n
🧑🏾🎨
./punycode xn--1ug6825plhas9r
🧑🏾🎨
여러 온라인 구현과 디코딩 결과를 비교했으며 모두 일치함을 확인했습니다.
Discussion
원래 이슈 내용은 다음과 같습니다:
xn--8k8hlfr9n은 🧑🏾🎨이어야 하는데, 현재는 🧑🏾🎨로 표시됩니다.- punycode 🧑🏾🎨는
xn--1ug6825plhas9r가 아니라xn--8k8hlfr9n이어야 합니다.
제 클라이언트는 xn--8k8hlfr9n을 🧑🏾🎨로 디코딩하고, 보고자는 🧑🏾🎨를 기대하고 있습니다. 온라인 도구들이 제 클라이언트의 출력과 일치하므로, 이슈를 won’t fix 로 닫고 보고자의 기대가 반대일 수 있음을 언급했습니다. 필요하다면 추가 설명을 요청했습니다.
Project Context
이 유틸리티는 Go를 배우는 과정에서 만들어졌습니다. DNS와 도메인 이름 관리 분야에서 10년 이상의 경험이 있기 때문에, 제가 잘 아는 영역에서 도구를 만드는 것이 자연스러웠습니다.
이 저장소에서 다루는 주요 주제:
- Go로 CLI 도구 만들기
- 배포 가능한 실행 파일 생성
- 명령줄 및 STDIN으로부터 데이터 읽기
- CLI 도구와
main함수 테스트
저장소가 완벽하지 않을 수도 있지만, 목적은 충분히 달성했습니다. 대안으로는 DNS와 관련된 유니코드 부분만 처리하도록 제한하는 방법이 있을 수 있는데, 이것도 깊은 논쟁거리입니다.
Contributions
제안, 아이디어, 개선 사항을 언제든 환영합니다. 저장소에 이슈를 열거나 풀 리퀘스트를 제출해 주세요.
Release
최신 Go 버전 및 모듈과의 호환성을 위해 v0.16.0을 릴리스했습니다.