Trong chương trình C, tôi muốn sắp xếp danh sách các chuỗi được mã hóa UTF-8 hợp lệ theo thứ tự điểm mã Unicode. Không có đối chiếu, không có nhận thức về địa phương.Strcmp có so sánh chuỗi utf-8 theo thứ tự điểm mã không?
Vì vậy, tôi cần một hàm so sánh. Thật dễ dàng để viết một hàm như vậy lặp lại các ký tự unicode. (Tôi tình cờ đang sử dụng GLib, vì vậy tôi sẽ lặp lại với g_utf8_next_char
và so sánh giá trị trả về của g_utf8_next_char
.)
Nhưng điều tôi tự hỏi, tò mò và có thể đơn giản và hiệu quả là: sẽ là một byte đơn giản -cho-byte strcmp
(hoặc g_strcmp
) thực sự làm cùng một công việc? Tôi nghĩ rằng, vì UTF-8 encodes các bit quan trọng nhất đầu tiên, và một điểm mã cần mã hóa trong N + 1 byte sẽ có một byte ban đầu lớn hơn một điểm mã cần được mã hóa bằng N byte.
Nhưng có thể tôi đang thiếu thứ gì đó? Cảm ơn trước.
Cảm ơn rất nhiều! Tôi sắp sửa theo dõi trường hợp sử dụng của mình và cách tôi không nghĩ rằng báo trước áp dụng, và sau đó thấy rằng thông tin này ở ngay trong [tiêu chuẩn] (http://www.w3.org/TR/xml- c14n # DocumentOrder) Tôi đang cố gắng triển khai: "So sánh bằng chữ cái, thứ tự chuỗi từ ít nhất đến lớn nhất theo thứ tự bảng chữ cái, dựa trên giá trị điểm của UCS, tương đương với thứ tự từ vựng dựa trên UTF-8." ':-)' – skagedal