인터뷰 질문으로, 일반적으로 8 비트 항목의 인플레 이스 스왑을 수행하여 순서를 반대로하는 기술적 인 부분에 대해서만 묻습니다 (실제로 어떤 문자를 나타내는 지에 관계없이).
동시에, 특히 상대적으로 노인을 인터뷰하는 경우에는 사양과 정확한 입력 형식에 대한 질문을 듣길 바랍니다. 단순히 8 비트 항목을 바꾸는 단순한 사례로 다시 보내더라도 그보다 더 넓은 의미로 생각하는지 여부를 알 수 있습니다.
광범위한 입력을 처리해야한다면 네트워크 스택과 같은 "스택"이라는 관점에서 생각하면됩니다. 여러 계층으로 소프트웨어를 빌드해야하며 각 계층은 특정 순서로 상당히 특정한 변환 세트를 적용합니다. 이를 통해 변환의 각 부분을 제어 할 수있을 정도로 단순하게 유지하고 요구 사항을 충족시킬 수있는 합리적인 기회를 가질 수 있습니다.
나는 적어도 어느 정도 실행 가능한 것을 발견 한 한 가지 가능성을 간략하게 설명합니다. 나는 더 좋은 아이디어를 가진 다른 사람들이있을 수 있음을 인정한 첫 번째 사람입니다. 적어도 나에게 이것은 실제 우아함이 거의없는 무차별 대인 공학과 비슷합니다.
일반적으로 다른 표현을 UCS-4 (일명 UTF-32)로 변환하여 시작하려고합니다. 이를 위해 일반적으로 사용자가 직접 입력하는 것보다 사용자의 입력에 의존하는 것이 좋습니다. 경우에 따라 특정 옥텟 시퀀스가 특정 인코딩 체계의 규칙을 따르지 않을 수도 있지만 특정 인코딩 체계를 따르는 지 거의 확신 할 수 없습니다.
다음 단계는 선택 사항입니다. 네 가지 유니 코드 정규화 형식 중 하나로 입력을 정규화 할 수 있습니다. 이 경우에, 당신은 것입니다 아마 정규 합성 한 다음 호환성 분해 다음 "NFKC"변환을 적용 할. 이것은 (가능한 경우) 발음 구별 부호 양식 (예 : Jon이 언급 한 U + 301)을 단일 코드 포인트로 변환합니다 (예 : "U + 301"을 가진 "A"는 "급성 인 라틴 대문자 A"로 변환 됨) , U + 00C1).
그런 다음 모든 문자를 처음부터 끝까지 살펴보고 문자열을 실제 문자로 나누고 분음 부호가 결합되어 있으면 수정 된 문자와 함께 유지합니다. 이것의 결과는 일반적으로 각각의 위치와 길이와 같은 문자열의 실제 문자 색인입니다.
일반적으로 이전 단계에서 작성한 색인을 사용하여 완전한 문자의 순서를 반대로 바꿉니다.
그런 다음 NFD (정식 분해)와 같은 다른 유니 코드 정규화 프로세스를 적용합니다 (선택 사항). 이렇게하면 앞에서 언급 한 "급성있는 라틴어 A"가 "라틴 대문자 A"와 "결합 된 급성"이라는 두 개의 코드 포인트로 다시 전환됩니다. 귀하의 의견은 그러나,로 시작하는 U + 00C1를 포함 할 일이 있다면, 그것은 또한 변환 할 것을 두 개의 코드 포인트로뿐만 아니라.
그런 다음 UCS-4 코드 포인트 시퀀스를 원하는 인코딩 (UTF-8, UTF-16 등)으로 인코딩합니다.
유니 코드 정규화 단계는 문자열을 저장하는 데 필요한 코드 포인트 수를 변경 / 변경할 수 있으므로 해당 코드 포인트를 포함하면 더 이상 원래 스토리지에 결과 문자열 피팅을 계획 할 수 없습니다. 분명히 결과 코드 포인트는 입력 코드 포인트와 직접 일치하지 않을 수도 있습니다.