'da bir UTF-8 dizgisi boyunca yineleme Bir UTF-8 dizesiyle yinelemeye çalışıyorum. Anladığım kadarıyla, UTF-8 karakterlerinin değişken uzunluğa sahip olması, bu yüzden char-by-char'ı yineleyemiyorum ama bir tür dönüşüm kullanmam gerekiyor. Bunun modern C++ 'da bunun bir işlevi olduğuna eminim ama ne olduğunu bilmiyorum. 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;
}
}
Ben
wchar_t
okudum ve
wstring
kullanılmamalıdır kadarıyla
clang++ -std=c++11 -stdlib=libc++ test.cpp
ile derlenmiştir.
"UTF-8 karakterleri" diye bir şey yoktur. Konuya aşina olana kadar, yazım kurallarına atlamak sinir bozucu ve isteksiz olacaktır. –
Bazı Unixoid'lerde veya pencerelerde misiniz? Ve kod birimleri, kod noktaları veya grafikler istiyor musunuz? (Karakter gülünç bağlam bağımlı (ve hatta karar vermek için yeterli olmayabilir), ve pencerelerde fazladan zarar var) – Deduplicator
Bir göz atmak isteyebilirsiniz [burada] (http://en.cppreference.com)/ağırlık/cPP/yerel/wstring_convert/from_bytes). Unutmayın ki gcc'de çalışmıyor, henüz bu standardın bir kısmını uygulamamışlar, fakat clang/libC++ 'da çalışıyorlar ve VS2013 IIRC ile çalışmalılar. –