2010-05-17 31 views
19

Nó đã được đề cập trong một số nguồn C++ 0x sẽ bao gồm hỗ trợ cấp độ ngôn ngữ tốt hơn cho Unicode (bao gồm các loại và chữ).Chức năng Unicode mới nào có trong C++ 0x?

Nếu ngôn ngữ sẽ thêm các tính năng mới này, bạn cũng sẽ tự nhiên cho rằng thư viện chuẩn cũng sẽ như vậy. Tuy nhiên, hiện tại tôi không thể tìm thấy bất kỳ tham chiếu nào tới thư viện chuẩn mới. Tôi dự kiến ​​sẽ tìm ra câu trả lời cho những câu trả lời này:

  1. Thư viện mới có cung cấp các phương pháp chuẩn để chuyển đổi UTF-8 sang UTF-16, v.v. không?
  2. Thư viện mới có cho phép ghi UTF-8 vào tệp, vào bảng điều khiển (hoặc từ tệp, từ bảng điều khiển) hay không. Nếu vậy, chúng ta có thể sử dụng cout hoặc chúng ta sẽ cần cái gì khác?
  3. Thư viện mới có bao gồm chức năng "cơ bản" như: phát hiện số byte và độ dài của chuỗi UTF-8, chuyển đổi thành chữ hoa/chữ thường (điều này xem xét ảnh hưởng của ngôn ngữ?)

Cuối cùng, có bất kỳ chức năng nào trong số này có sẵn trong bất kỳ trình biên dịch phổ biến nào như GCC hay Visual Studio không?

Tôi đã cố gắng tìm kiếm thông tin, nhưng dường như tôi không thể tìm thấy bất cứ điều gì. Tôi thực sự bắt đầu nghĩ rằng có lẽ những điều này thậm chí không được quyết định (Tôi biết rằng C++ 0x là một công việc đang được tiến hành).

Trả lời

13

Thư viện mới có cung cấp các phương thức chuẩn để chuyển đổi UTF-8 thành UTF-16, v.v. không?
Không. Thư viện mới cung cấp std::codecvt các khía cạnh thực hiện chuyển đổi cho bạn khi giao dịch với iostream, tuy nhiên. ISO/IEC TR 19769: 2004, Báo cáo kỹ thuật Unicode của C, được bao gồm gần như nguyên văn trong tiêu chuẩn mới.

Thư viện mới có cho phép ghi UTF-8 vào tệp, vào bảng điều khiển (hoặc từ tệp, từ bảng điều khiển) hay không. Nếu vậy, chúng ta có thể sử dụng cout hoặc chúng ta sẽ cần cái gì khác?
Có, bạn chỉ cần hấp thụ cout với mặt chính xác codecvt. Tuy nhiên, hãy lưu ý rằng giao diện điều khiển không bắt buộc phải hiển thị các ký tự đó một cách chính xác

Thư viện mới có chứa chức năng "cơ bản" không: phát hiện số byte và độ dài của chuỗi UTF-8, chuyển sang chữ hoa/thường -case (điều này xem xét ảnh hưởng của địa phương?)
AFAIK chức năng đó tồn tại với tiêu chuẩn C++ 03 hiện có. std::toupperstd::towupper chức năng khóa học giống như trong các phiên bản trước của tiêu chuẩn. Không có bất kỳ chức năng mới nào hoạt động trên unicode cho việc này.

Nếu bạn cần những thứ này, bạn sẽ vẫn phải dựa vào thư viện bên ngoài - <iostream> là phần chính được trang bị thêm.

Điều gì, cụ thể, được thêm cho unicode trong tiêu chuẩn mới?literals

  • Unicode, qua u8 "", u "", và U ""
  • std::char_traits lớp dành cho UTF-8, UTF-16 và UTF-32
  • mbrtoc16, c16rtomb, mbrtoc32, và c32rtomb từ ISO/IEC TR 19.769: 2004
  • std::codecvt khía cạnh cho các thư viện địa phương
  • các std::wstring_convert lớp mẫu (trong đó sử dụng các cơ chế codecvt cho mã bộ chuyển đổi)
  • std::wbuffer_convert, tương tự như wstring_convert ngoại trừ mảng thô, không phải chuỗi.
+1

Lưu ý rằng 'std :: toupper()' cụ thể chưa được xử lý để xử lý Unicode. Đôi khi một ký tự đầu vào đơn lẻ sẽ cần phải được chuyển đổi thành * nhiều * ký tự đầu ra. Điểm trong trường hợp: 'toupper ('ß')' sẽ cần phải cho '" SS "'. 'toupper()' (trả về một ký tự đơn luôn) không thể phân phối được. – DevSolar