Phương pháp xử lý Unicode tốt nhất trong C ++ là gì?
Phương pháp xử lý Unicode tốt nhất trong C ++ là gì?
Câu trả lời:
is_alpha
trừ khi đó là định nghĩa bạn muốn.string
nếu bạn quan tâm đến tính đúng đắn, hãy luôn sử dụng thư viện unicode của bạn cho việc này.Nếu bạn không quan tâm đến khả năng tương thích ngược với các tiêu chuẩn C ++ trước đây, tiêu chuẩn C ++ 11 hiện tại đã được tích hợp hỗ trợ Unicode: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2011 /n3242.pdf
Vì vậy, phương pháp thực sự tốt nhất để xử lý Unicode trong C ++ là sử dụng các cơ sở được xây dựng sẵn cho nó. Tuy nhiên, điều đó không phải lúc nào cũng có thể xảy ra với các cơ sở mã cũ hơn, với tiêu chuẩn hiện tại rất mới.
CHỈNH SỬA: Để làm rõ, C ++ 11 nhận thức được Unicode vì nó hiện đã hỗ trợ các ký tự Unicode và chuỗi Unicode. Tuy nhiên, thư viện chuẩn chỉ hỗ trợ hạn chế cho việc xử lý và chuyển đổi Unicode. Đối với nhu cầu hiện tại của bạn, điều này có thể là đủ. Tuy nhiên, nếu bạn cần thực hiện một lượng lớn vật nặng ngay bây giờ thì bạn vẫn có thể cần sử dụng một thứ gì đó như ICU để xử lý chuyên sâu hơn. Có một số đề xuất hiện đang được thực hiện để hỗ trợ mạnh mẽ hơn cho việc chuyển đổi văn bản giữa các bảng mã khác nhau. Dự đoán của tôi (và hy vọng) là đây sẽ là một phần của báo cáo kỹ thuật tiếp theo .
Công ty của chúng tôi (và các công ty khác) sử dụng nguồn mở Internation Components cho thư viện Unicode (ICU) do Taligent phát triển ban đầu.
Nó xử lý các chuỗi, ngôn ngữ, chuyển đổi, ngày / giờ, đối chiếu, chuyển đổi, et. al.
Bắt đầu với ICU Userguide
Đây là danh sách kiểm tra cho lập trình Windows:
Xem so sánh chuỗi không phân biệt chữ hoa chữ thường trong C ++
Câu hỏi đó có liên kết đến tài liệu Microsoft về Unicode: http://msdn.microsoft.com/en-us/library/cc194799.aspx
Nếu bạn nhìn về phía điều hướng bên trái trên MSDN bên cạnh bài viết đó, bạn sẽ tìm thấy rất nhiều thông tin liên quan đến các hàm Unicode. Đây là một phần của chương về "Ký tự mã hóa" ( http://msdn.microsoft.com/en-us/library/cc194786.aspx )
Nó có các phần phụ sau:
Mặc dù đây có thể không phải là phương pháp hay nhất cho tất cả mọi người, nhưng bạn có thể viết các quy trình C ++ UNICODE của riêng mình nếu bạn muốn!
Tôi vừa hoàn thành việc đó vào cuối tuần. Tôi đã học được rất nhiều điều, mặc dù tôi không đảm bảo rằng nó hoàn toàn không có lỗi, nhưng tôi đã thử nghiệm rất nhiều và nó có vẻ hoạt động chính xác.
Mã của tôi theo giấy phép BSD Mới và có thể tìm thấy ở đây:
http://code.google.com/p/netwidecc/downloads/list
Nó được gọi là WSUCONV và đi kèm với một chương trình main () mẫu chuyển đổi giữa UTF-8, UTF-16 và Standard ASCII. Nếu bạn vứt bỏ mã chính, bạn đã có một thư viện đẹp để đọc / ghi UNICODE.
Như đã nói ở trên, thư viện là lựa chọn tốt nhất khi sử dụng một hệ thống lớn. Tuy nhiên, đôi khi bạn muốn tự xử lý mọi thứ (có thể vì thư viện sẽ sử dụng nhiều tài nguyên như trên bộ điều khiển vi mô). Trong trường hợp này, bạn muốn có một thư viện đơn giản mà bạn có thể sao chép các phần của những thứ bạn thực sự cần.
Mã ví dụ của Willow Schlanger có vẻ là một mã tốt (xem câu trả lời của anh ấy để biết thêm chi tiết).
Tôi cũng tìm thấy một cái khác có mã nhỏ hơn, nhưng thiếu kiểm tra lỗi đầy đủ và chỉ xử lý UTF-8 nhưng đơn giản hơn để lấy các phần ra khỏi.
Đây là danh sách các thư viện nhúng có vẻ tốt.
Sử dụng các Thành phần Quốc tế của IBM cho Unicode
Hãy xem các khuyến nghị của UTF-8 Everywhere
string
dữ liệu đó là dữ liệu nhị phân.