पर कॉल करते समय सीमा में नहीं है, मुझे यूनिकोड इनपुट के साथ locale
लाइब्रेरी का उपयोग करते समय एक अजीब व्यवहार का सामना करना पड़ रहा है। नीचे एक न्यूनतम कामकाजी उदाहरण है:यूनिकोड वर्ण locale.strxfrm
>>> x = '\U0010fefd'
>>> ord(x)
1113853
>>> ord('\U0010fefd') == 0X10fefd
True
>>> ord(x) <= 0X10ffff
True
>>> import locale
>>> locale.strxfrm(x)
'\U0010fefd'
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.strxfrm(x)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: character U+110000 is not in range [U+0000; U+10ffff]
मैंने इसे पायथन 3.3, 3.4 और 3.5 पर देखा है। मुझे पायथन 2.7 पर कोई त्रुटि नहीं मिली है।
जहाँ तक मैं देख सकता हूं, मेरा यूनिकोड इनपुट उपयुक्त यूनिकोड रेंज के भीतर है, इसलिए ऐसा लगता है कि किसी भी तरह से 'en_US.UTF-8' का उपयोग करते समय strxfrm
में कुछ आंतरिक इनपुट को सीमा से बाहर ले जा रहा है।
मै मैक ओएस एक्स चला रहा हूं, और यह व्यवहार http://bugs.python.org/issue23195 से संबंधित हो सकता है ... लेकिन मुझे लगता है कि यह बग केवल गलत परिणामों के रूप में प्रकट होगा, अपवाद अपवाद नहीं। मैं अपनी एसएलएस 11 मशीन पर दोहराना नहीं कर सकता, और अन्य पुष्टि करते हैं कि वे उबंटू, सेंटोस या विंडोज पर दोहराना नहीं कर सकते हैं। टिप्पणियों में अन्य ओएस के बारे में सुनना निर्देशक हो सकता है।
कोई बता सकता है कि हुड के नीचे क्या हो रहा है?
मैं इसे उबंटू पर पुन: पेश नहीं कर सकता। 'enale.strx-x' लोकेल में' locale.strxfrm (x) 'रिटर्न' 'x x \ x01 \ x01 \ x01 Ւ''। – jfs
आप ['icu.Collator.createInstance (icu.Locale ('en_US') का उपयोग कर सकते हैं)। GetSortKey' इसके बजाय] (http://stackoverflow.com/a/32178778/4279) – jfs
@JFSebastian हां, मैंने उपयोग किया है पीईआईसीयू और पुष्टि करें कि वहां कोई समस्या नहीं है। मैं stdlib 'locale' मॉड्यूल में इस व्यवहार के बारे में अधिक चिंतित था और यदि यह किसी प्रकार की उपयोगकर्ता त्रुटि थी (यानी मैंने कुछ गलत किया) या यदि कुछ और घबराहट चल रही है। – SethMMorton