Như một câu hỏi phỏng vấn, người ta thường chỉ hỏi về các bit kỹ thuật khi thực hiện hoán đổi tại chỗ các vật phẩm 8 bit để đảo ngược thứ tự của chúng (bất kể các ký tự đó có thể đại diện cho những ký tự nào).
Đồng thời, đặc biệt nếu bạn đang phỏng vấn một người tương đối cao cấp, ít nhất bạn có thể hy vọng được nghe một số câu hỏi về đặc điểm kỹ thuật và hình thức chính xác của đầu vào. Ngay cả khi bạn hướng chúng trở lại trường hợp đơn giản chỉ cần hoán đổi các mục 8 bit, việc biết liệu chúng có nghĩ theo nghĩa rộng hơn có thể có giá trị hay không.
Nếu bạn phải đối phó với một loạt các đầu vào, bạn chỉ cần nghĩ về "ngăn xếp", giống như một ngăn xếp mạng. Bạn phải xây dựng phần mềm của mình theo một số lớp, mỗi lớp áp dụng một bộ biến đổi khá cụ thể theo một thứ tự cụ thể. Điều này cho phép bạn giữ cho mỗi phần của phép biến đổi đủ đơn giản để bạn có thể kiểm soát nó và có cơ hội hợp lý để làm cho nó đáp ứng các yêu cầu của nó.
Tôi sẽ phác thảo một khả năng mà tôi đã tìm thấy ít nhất là khả thi. Tôi là người đầu tiên thừa nhận rằng có thể có những người khác có ý tưởng tốt hơn. Ít nhất với tôi, điều này có vẻ hơi giống với kỹ thuật vũ phu, với rất ít sự thanh lịch thực sự.
Bạn thường muốn bắt đầu bằng cách chuyển đổi bất kỳ đại diện nào khác sang UCS-4 (còn gọi là UTF-32). Đối với điều này, bạn thường thích dựa vào đầu vào từ người dùng hơn là cố gắng tự mình tìm ra. Trong một số trường hợp, bạn có thể chắc chắn một chuỗi các octet cụ thể không tuân theo các quy tắc của sơ đồ mã hóa cụ thể, nhưng bạn hiếm khi (nếu có) chắc chắn rằng nó tuân theo một sơ đồ mã hóa cụ thể.
Bước tiếp theo là tùy chọn. Bạn có thể chuẩn hóa đầu vào thành một trong bốn biểu mẫu chuẩn hóa Unicode. Trong trường hợp này, có lẽ bạn muốn áp dụng phép chuyển đổi "NFKC": phân rã tương thích theo sau là thành phần chính tắc. Điều này sẽ (nếu có thể) chuyển đổi kết hợp các hình thức dấu phụ (như U + 301 mà Jon đã đề cập) thành các điểm mã đơn (ví dụ: "A" với "U + 301" sẽ được chuyển đổi thành "vốn A Latin với cấp tính" , U + 00C1).
Sau đó, bạn đi qua tất cả các ký tự từ đầu đến cuối, ngắt chuỗi thành các ký tự thực tế - và nếu có (vẫn) kết hợp các dấu phụ, giữ chúng với các ký tự mà chúng sửa đổi. Kết quả của điều này thường sẽ là một chỉ mục của các ký tự thực trong chuỗi, chẳng hạn như vị trí và độ dài của mỗi ký tự.
Bạn đảo ngược thứ tự của các ký tự hoàn chỉnh đó, thường bằng cách sử dụng chỉ mục bạn đã tạo ở bước trước.
Sau đó, bạn (một lần nữa, tùy chọn) áp dụng một quy trình chuẩn hóa Unicode khác, chẳng hạn như NFD (phân tách chính tắc). Điều này sẽ biến "Latin A với cấp tính" đã nói ở trên thành hai điểm mã - "vốn A Latin" và "Acute kết hợp". Tuy nhiên, nếu đầu vào của bạn có chứa U + 00C1 để bắt đầu, thì nó cũng sẽ chuyển đổi nó thành hai điểm mã.
Sau đó, bạn mã hóa chuỗi các điểm mã UCS-4 thành mã hóa mong muốn (UTF-8, UTF-16, v.v.)
Lưu ý rằng các bước chuẩn hóa Unicode có thể / sẽ thay đổi số lượng điểm mã cần thiết để lưu trữ chuỗi, vì vậy nếu bạn bao gồm các điểm đó, bạn không còn có thể lập kế hoạch cho chuỗi kết quả phù hợp với bộ lưu trữ ban đầu. Rõ ràng là đủ, các điểm mã kết quả có thể không tương ứng trực tiếp với các điểm mã đầu vào.