मुझे पता है कि वहाँ utf-8 के बारे में विभिन्न सवाल किया गया कर रहे हैं, मुख्य रूप से पुस्तकालयों वस्तुओं की तरह utf-8 'स्ट्रिंग' में हेरफेर करने के बारे में हूँ।UTF-8 C++: त्वरित और गंदा चाल
हालांकि, मैं एक 'अंतर्राष्ट्रीयकृत' परियोजना (एक वेबसाइट, जिसमें मैं एक सी ++ बैकएंड कोड करता हूं ... पूछता हूं) पर काम कर रहा हूं, यहां तक कि अगर हम utf-8 से निपटते हैं तो हमें भी इस तरह की आवश्यकता नहीं है पुस्तकालयों। अधिकांश बार सादे std :: स्ट्रिंग विधियों या एसटीएल एल्गोरिदम हमारी आवश्यकताओं के लिए बहुत ही पर्याप्त हैं, और वास्तव में यह पहली जगह utf-8 का उपयोग करने का लक्ष्य है।
तो, क्या मैं यहाँ रहा हूँ "त्वरित & गंदा" चाल की एक पूंजीकरण कि आप utf-8 std :: स्ट्रिंग (कोई स्थिरांक चार * के रूप में जमा करने के लिए संबंधित के बारे में पता है, मुझे नहीं पता वास्तव में सी-स्टाइल कोड की परवाह है, मेरे बफर आकार के बारे में लगातार चिंता करने से मुझे बेहतर चीजें मिलती हैं)।
उदाहरण के लिए, यहाँ एक "त्वरित & गंदा" वर्णों की संख्या प्राप्त करने के लिए (जो उपयोगी है अगर यह अपने प्रदर्शन बॉक्स में फिट होगा पता करने के लिए) चाल है:
#include <string>
#include <algorithm>
// Let's remember than in utf-8 encoding, a character may be
// 1 byte: '0.......'
// 2 bytes: '110.....' '10......'
// 3 bytes: '1110....' '10......' '10......'
// 4 bytes: '11110...' '10......' '10......' '10......'
// Therefore '10......' is not the beginning of a character ;)
const unsigned char mask = 0xC0;
const unsigned char notUtf8Begin = 0x80;
struct Utf8Begin
{
bool operator(char c) const { return (c & mask) != notUtf8Begin; }
};
// Let's count
size_t countUtf8Characters(const std::string& s)
{
return std::count_if(s.begin(), s.end(), Utf8Begin());
}
वास्तव में मैं
- छँटाई काम करता है के रूप में उम्मीद : जब मैं वर्णों की संख्या और उस std :: स्ट्रिंग या एसटीएल एल्गोरिथम की तुलना में कुछ और की जरूरत है मुफ्त के बाद से के लिए प्रस्ताव नहीं होगा एक USECASE सामना करने के लिए अभी तक
- एक शब्द का कोई हिस्सा किसी शब्द या एक और शब्द के हिस्से के रूप में भ्रमित किया जा सकता है
मैं, पता करने के लिए यदि आप अन्य तुलनीय चाल है चाहते हैं दोनों की गिनती के लिए और अन्य साधारण कार्यों के लिए।
मैं फिर कहता हूँ, मैं के बारे में ICU और Utf8-CPP पता है, लेकिन मैं उन्हें में रुचि के बाद से मैं एक पूर्ण उपचार की जरूरत नहीं है नहीं कर रहा हूँ (और वास्तव में मैं पात्रों में से गिनती की तुलना में अधिक की जरूरत कभी नहीं किया है)।
मैं भी दोहराने है कि मैं के उपचार में कोई दिलचस्पी नहीं है चार * की, वे पुराने ढंग का है।
तो diacritics संयोजन आपके लिए कोई फर्क नहीं पड़ता? यह दुख की बात है। वे आपकी गिनती के पात्र हो सकते हैं लेकिन वे अधिक जगह नहीं लेते हैं। वास्तव में कोई संयोजन चरित्र। या शून्य चौड़ाई रिक्त स्थान। और उम्मीद के अनुसार काम छंटनी? आप क्या उम्मीद करते हैं? जब आप जानबूझकर यूनिकोड (कुछ प्रकार के बाइट सरणी को छोड़कर) का उपयोग नहीं करेंगे तो किसी भी लोकेल-विशिष्ट प्रकार को संयोजन के बारे में पता होगा। – Joey
मेरा संपादन देखें, मेरा आवेदन किसी वेबसाइट के लिए बैकएंड है, इसलिए लोकेल ब्राउज़र के हाथ में है। हमने अभी तक संयोजन पात्रों की समस्या का सामना नहीं किया है, मैंने उनके बारे में सुना है लेकिन उन्हें कभी नहीं देखा है, आप किस भाषा में उन्हें सामना करते हैं? –
गैर-अंग्रेज़ी पाठ के लिए काम नहीं करने वाले उपयोग मामलों के युगल: सॉर्टिंग, केस फोल्डिंग, मिलान (उदाहरण के लिए जर्मन ß और एसएस)। –