Tôi đang cố gắng lặp qua chuỗi UTF-8. Vấn đề như tôi hiểu là các ký tự UTF-8 có độ dài thay đổi, vì vậy tôi không thể lặp lại char-by-char nhưng tôi phải sử dụng một số loại chuyển đổi. Tôi chắc chắn có một chức năng cho điều này trong C++ hiện đại nhưng tôi không biết nó là gì.Lặp lại qua chuỗi UTF-8 trong C++ 11
#include <iostream>
#include <string>
int main()
{
std::string text = u8"řabcdě";
std::cout << text << std::endl; // Prints fine
std::cout << "First letter is: " << text.at(0) << text.at(1) << std::endl; // Again fine. So 'ř' is a 2 byte letter?
for(auto it = text.begin(); it < text.end(); it++)
{
// Obviously wrong. Outputs only ascii part of the text (a, b, c, d) correctly
std::cout << "Iterating: " << *it << std::endl;
}
}
Biên soạn với clang++ -std=c++11 -stdlib=libc++ test.cpp
Từ những gì tôi đã đọc và wchar_t
wstring
không nên được sử dụng.
Không có nội dung nào là "ký tự UTF-8". Cho đến khi bạn đã quen thuộc với vấn đề này, nó sẽ bực dọc và bất tiện khi nhảy vào viết mã. –
Bạn có đang sử dụng Unixoid hoặc trên các cửa sổ không? Và bạn có muốn codeunits, codepoints hoặc graphemes? (Nhân vật lố bịch phụ thuộc vào bối cảnh (và thậm chí cả bối cảnh có thể không đủ để quyết định), và có thêm tổn thương trong cửa hàng trên cửa sổ) – Deduplicator
Bạn có thể muốn xem [đây] (http://en.cppreference.com/w/cpp/locale/wstring_convert/from_bytes). Ghi nhớ nó không hoạt động trong gcc, chúng chưa thực hiện phần này của tiêu chuẩn, nhưng hoạt động trong clang/libC++ và nên làm việc với VS2013 IIRC. –