2010-09-08 65 views
5

Tôi có một chuỗi chứa ký tự UTF-8 và tôi có phương pháp chuyển đổi mọi ký tự thành chữ hoa hoặc chữ thường. chồng chéo với ASCII, và rõ ràng một số ký tự không thể được chuyển đổi, ví dụ bất kỳ nhân vật Trung Quốc nào. Tuy nhiên, có một cách hay để phát hiện và chuyển đổi các ký tự khác có thể là Trên/Dưới, ví dụ: tất cả các nhân vật Hy Lạp? Cũng xin lưu ý rằng tôi cần có khả năng thực hiện việc này trên cả Windows và Linux.Chuyển đổi các ký tự UTF-8 sang chữ hoa/chữ thường C++

Cảm ơn bạn,

+0

Điều quan trọng là nhận thuật ngữ chính xác tại đây để nhận được câu trả lời hữu ích. UTF-8 là mã hóa ký tự được chỉ định trong RFC 3629 (và các nơi khác); nó chứa các thuật toán để ánh xạ giữa các ký tự unicode và chuỗi octet đại diện cho các ký tự đó một cách hợp lý. Hãy chính xác với các loại; thậm chí tốt hơn, hiển thị mã bao gồm các khai báo và các loại. –

+1

Greg bình luận của bạn không có ý nghĩa với tôi, xin lỗi nhưng tôi không có bất kỳ mã nào nhưng tôi đang cố gắng tìm ra cách để làm điều gì đó, không cố gắng gỡ lỗi cái gì đó không hoạt động chính xác để không có ý nghĩa với tôi Tôi biết UTF-8 là một mã hóa, nhưng điều đó thực sự không thay đổi những gì tôi đang cố gắng đạt được mà phát triển một phương tiện để đi từ "a" -> "A" hoặc từ "Ω" -> "ω" – NSA

+0

Mục đích là gì? Bạn có định sử dụng nó để so sánh các chuỗi đã xử lý đó không? Tôi giả sử bạn muốn sử dụng nó để so sánh như vậy. Bạn có nhận ra rằng điều này sẽ không xử lý những thứ như "ß" và "ss" tương đương với tiếng Đức không? – wilx

Trả lời

13

Hãy xem ICU.

Lưu ý rằng trường hợp thấp hơn đối với các hàm chữ hoa thường phụ thuộc vào ngôn ngữ. Hãy suy nghĩ về lá thư (ascii) của thổ nhĩ kỳ mà tôi nhận được "chữ thường không có dấu chấm i" và (ascii) i được "viết hoa chữ I với dấu chấm".

+0

Cảm ơn bạn đã cho Alexandre tip, tuy nhiên tôi bị loại trừ cho ứng dụng này từ liên kết chống lại bất kỳ libs bên thứ 3. Vì vậy, tôi cần phải tìm ra cách để làm điều này với ra bằng cách sử dụng lib đó. – NSA

+0

Tôi khuyên bạn nên viết cho bạn tiện ích lập bản đồ trường hợp của riêng bạn, xem http://www.unicode.org/faq/casemap_charprop.html. Từ đó bạn có thể tải xuống tất cả các ánh xạ trường hợp đặc biệt. – tidwall

+2

C++ không có hỗ trợ unicode nào. ICU là * cách * để đi. –

2

Giả sử bạn có quyền truy cập vào wctype.h, sau đó chuyển văn bản của bạn thành chuỗi unicode 2 byte và sử dụng towupper(). Sau đó chuyển nó trở lại UTF-8.

+1

hoặc sử dụng ICU như Alexandre đã đề cập. – tidwall

+1

Bạn không xử lý sigma terminal ß và Hy Lạp theo cách này. –

+0

@Alexandre C .: Các ký tự có được chuyển đổi chính xác hay không phụ thuộc hoàn toàn vào ngôn ngữ hiện tại. – caf

Các vấn đề liên quan