Unicode girişli locale
kütüphanesi kullanırken garip bir davranış yaşıyorum. Ben Python 3.3, 3.4 ve 3.5 bu gördükUnicode karakter, locale.strxfrm çağrılıyor menzil aralığında değil
>>> 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]
: Aşağıda minimum çalışma örneğidir. Python 2.7'de bir hata alamıyorum.
Görebildiğim kadarıyla, benim unicode girdim uygun unicode aralığı içerisindedir, bu nedenle 'en_US.UTF-8' işlevini kullanırken bir şekilde dahili bir şey girişi menzil dışına taşıyor gibi görünmektedir.
Mac OS X çalıştırıyorum ve bu davranış http://bugs.python.org/issue23195 ... ile ilgili olabilir, ancak bu hatanın yalnızca yükseltilmiş bir istisna değil, yanlış sonuç olarak ortaya çıkacağı izlenimindeydim. SLES 11 makinemde çoğalamıyorum ve diğerleri Ubuntu, Centos veya Windows üzerinde çoğaltılamadıklarını onaylıyor. Yorumlardaki diğer işletim sistemlerini duymak öğretici olabilir.
Burada biri kaputun altında neler olabileceğini açıklayabilir mi?
Ubuntu'da yeniden oluşturamıyorum. 'locale.strxfrm (x)' 'en_US.UTF-8' yerel ayarında' '\ x01 \ x01 \ x01 \ x01 Ւ '' döndürür. – jfs
['icu.Collator.createInstance (icu.Locale ('en_US')) kullanabilirsiniz. GetSortKey' yerine] (http://stackoverflow.com/a/32178778/4279) – jfs
@JFSebastian Evet, kullandım PyICU ve orada bir sorun olmadığını onaylayın. Stdlib 'locale' modülünde bu davranış hakkında daha fazla endişeliydim ve eğer bu bir çeşit kullanıcı hatasıysa (yani yanlış bir şey yaptım) veya daha hararetli bir şey varsa. – SethMMorton