Tôi không biết làm thế nào để giải quyết rằng:Làm thế nào để làm việc với UTF-8 trong C++, chuyển đổi từ bảng mã khác sang UTF-8
Hãy tưởng tượng, chúng ta có 4 trang web:
- A: UTF-8
- B: ISO-8859-1
- C: ASCII
- D: UTF-16
My Chương trình được viết bằng C++ thực hiện như sau: Nó tải xuống một trang web và phân tích nó. Nhưng nó phải hiểu nội dung. Vấn đề của tôi không phải là phân tích cú pháp được thực hiện với các ký tự ASCII như ">"
hoặc "<"
.
Vấn đề là chương trình sẽ tìm tất cả các từ trong văn bản của trang web. Một từ là bất kỳ sự kết hợp nào của các ký tự chữ và số. Sau đó, tôi gửi những từ này đến một máy chủ. Cơ sở dữ liệu và giao diện người dùng web đang sử dụng UTF-8. Vì vậy, câu hỏi của tôi là:
- Làm thế nào tôi có thể chuyển đổi "bất kỳ" (hoặc sử dụng nhiều nhất) mã hóa ký tự UTF-8?
- Làm cách nào tôi có thể làm việc với UTF-8-strings trong C++? Tôi nghĩ rằng
wchar_t
không hoạt động vì nó dài 2 byte. Mã-điểm trong UTF-8 dài tối đa 4 byte ... - Có các chức năng như
isspace()
,isalnum()
,strlen()
,tolower()
cho các chuỗi UTF-8 này không?
Xin lưu ý: Tôi không thực hiện bất kỳ đầu ra nào (như std::cout
) bằng C++. Chỉ lọc ra các từ và gửi chúng đến máy chủ.
Tôi biết về UTF8-CPP nhưng không có chức năng is*()
. Và khi tôi đọc, nó không chuyển đổi từ mã hóa ký tự khác sang UTF-8. Chỉ từ UTF- * đến UTF-8.
Edit: Tôi quên nói, rằng chương trình đã được cầm tay: Windows, Linux, ...
Thư viện đa nền tảng tốt để xử lý Unicode (thuộc tính codepoint, chuyển đổi ký tự, v.v.) là [ICU của IBM] (http://site.icu-project.org/) mặc dù nó có thể quá mức cần thiết cho nhu cầu của bạn. – syam
* Tôi nghĩ wchar_t không hoạt động vì nó dài 2 byte * => nó tệ hơn 'wchar_t' là trình biên dịch/đích cụ thể, với MSVC nó sẽ dài 2 byte, nhưng với gcc và clang dài 4 byte. –
@syam rất nhiều dự án và sản phẩm chỉ sử dụng ICU cho các chức năng chuyển đổi, vì vậy tôi sẽ không nghĩ nó là quá mức cần thiết. Bạn chỉ có thể sử dụng thư viện chung hoặc thậm chí là liên kết tĩnh. –