2012-05-23 10 views
8

Bazı Çince, Rusça veya çeşitli ingilizce olmayan karakter kümelerini sınama amacıyla düz bir dosyaya yazmaya çalışıyorum. Unicode onaltılık veya ondalık bir değerin karşılık gelen karakterine nasıl çıkacağına takılıyorum.Unicode karakteri için Python unicode kod noktası

Örneğin, Python'da, абвгдежзийкл gibi sabit kodlanmış bir karakter kümeniz varsa, value = u"абвгдежзийкл"'u atayacaksınız ve sorun olmayacaktır.

Ancak, bir değişkende saklanan 1081/0439 gibi ondalık veya onaltılık bir ondalık değeriniz varsa ve bunu ilgili gerçek karakterle (ve yalnızca çıktı 0x439'u değil) yazdırmak istediğinizde, bu nasıl yapılır? Yukarıdaki Unicode ondalık/onaltılı değer, й anlamına gelir.

+0

Başlığınızı değiştirmek isteyebilirsiniz. sorusu. UTF-8'den bahsediyor, ancak sorunun UTF-8 ile hiçbir ilgisi yok. – NPE

+2

Sürekli olarak "ondalık veya onaltılık" ifadesi, "ondalık veya onaltılı" ifadenin yalnızca bir temsil meselesi olduğu ve değerin kendisinin bir özelliği olmadığı gerçeğini görmezden geldiğinizi düşünür. – glglgl

cevap

17

Kullanım unichr() (Python 2) veya chr() (Python 3):

In [4]: print(unichr(1081)) 
Out[4]: й 
+0

Cevabınız için teşekkür ederim, çünkü aradığımı değil, zaten kodlanmış girdileri nasıl kullanacağımı biliyorum. Standart çıktı için bir değişkende veya dosyaya çıktı olarak ondalık veya onaltılık ondalık unicode değerlerinin nasıl işleneceğini bilmek istiyorum. – stoneferry

+0

@stoneferry: '1081' 'i, karakter kodunu içeren değişkeninizin adına değiştirin. – NPE

+0

Yalnızca '1081' tamsayı içeren bir değişkene sahip olsaydım, örneğin '1081' jsut'unu değil, karakter çıktılamak için yazdırma komutunu kullanırdım. – stoneferry

1

Yani sorunun cevabı:

  1. sonra int(hex_value, 16)
  2. ile onluya onaltılık değerini dönüştürmek chr() ile ilgili strin olsun.

Özetle:

>>> print(chr(int('0x897F', 16))) 
西 
0

yanlışlıkla yaşarsanız: unichr kullanarak onaltılık değerini dönüştürmek çalışırken

ValueError: unichr() arg not in range(0x10000) (narrow Python build)

, bir şey yaparak bu sorundan alabilirsiniz gibi:

>>> n = int('0001f600', 16) 
>>> s = '\\U{:0>8X}'.format(n) 
>>> s 
'\\U0001F600' 
>>> binary = s.decode('unicode-escape') 
>>> print(binary)