SORU
2 EYLÜL 2010, PERŞEMBE


____ Xi için en iyi çıkış tipi ve kodlama uygulamaları() fonksiyonu var?

Son zamanlarda, __repr__(), format() ve kodlama ile sorun çok yaşadım.__repr__() çıkış kodlanmış olmalıdır ya da bir unicode dizesi olabilir?Python __repr__() en iyi sonuç için bir kodlama var mı? Çıkış için istediğim ASCII olmayan karakterler var.

Python 2 kullanıyorum.kolayca Python 3 için adapte edilebilir x ve kod yazmak istiyorum. Program böylece kullanır

# -*- coding: utf-8 -*-
from __future__ import unicode_literals, print_function  # The 'Hello' literal represents a Unicode object

Burada beni rahatsız eden bazı Ek sorunlar var, ve bunları çözen bir çözüm arıyorum:

  1. UTF-8 bir terminal için yazdırma iş (UTF-8 sys.stdout.encoding set var ama diğer durumlarda çok işe yaradı en iyisi).
  2. Boru çıktıyı bir dosyaya (UTF-8 kodlanmış olarak) çalışması gerekir (bu durumda, sys.stdout.encoding 13**).
  3. __repr__() birçok fonksiyon için benim kod şu anda* *15, ve ağır olan birçok vardır. Sağlam ve daha hafif bir şey var mı?
  4. Bazı durumlarda, hatta 16*, yani*, nesnelerin temsili gibi çirkin hayvanlar, biçimlendirme dize koymak çözülür, ve sonra yeniden kodlanmış. Böyle karmaşık dönüşümleri önlemek için istiyorum.

Kibarca bu kodlama sorulara saygılı davranan __repr__() basit fonksiyonlar yazmak için ne dersiniz?

CEVAP
2 EYLÜL 2010, PERŞEMBE


, *18 Python2* (__str__) string bir nesne dönmek gerekir, bir değil unicode nesne. Python3, durumu __repr__ ters ve __str__ unicode nesneleri, bayt (kızlık dize) döndürür gereken nesneler:

class Foo(object):
    def __repr__(self):
        return u'\N{WHITE SMILING FACE}' 

class Bar(object):
    def __repr__(self):
        return u'\N{WHITE SMILING FACE}'.encode('utf8')

repr(Bar())
# ☺
repr(Foo())
# UnicodeEncodeError: 'ascii' codec can't encode character u'\u263a' in position 0: ordinal not in range(128)

Python2, başka seçeneğin yok. Bu kodlama almak zorunda __repr__ değerini döndürür.

Bu arada, PrintFails wiki okudunuz mu? Doğrudan cevap değil diğer sorularınızı, ama aydınlatıcı olarak faydalı buldum neden belirli hatalar oluşur.


from __future__ import unicode_literals, kullanırken

'<{}>'.format(repr(x).decode('utf-8'))).encode('utf-8')

daha basit yazılabilir

str('<{}>').format(repr(x))

str varsayarsak 28 ** sisteminizde kodlar.

from __future__ import unicode_literals ifadesi olarak yazılabilir olmadan:

'<{}>'.format(repr(x))

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • AlaskanGrizzly

    AlaskanGrizz

    30 EKİM 2009
  • Amazon Web Services

    Amazon Web S

    8 NİSAN 2009
  • Fubar Protocol

    Fubar Protoc

    21 AĞUSTOS 2010