1

私が欲しいもの

この例では、を使用せずに Unicode 文字列を表示したいと思いますprint

In [1]: a = u's·A/m'

In [2]: type(a)
Out[2]: str

In [3]: a
Out[3]: 's\xc2\xb7A/m'

In [4]: print a
s·A/m

文字列を強制的__repr__に表示しないs\xc2\xb7A/mようにする方法はs·A/m?

ユースケースは何ですか?

たとえば、その単位に関連する数値を表すクラスがあります。

class MyNumber(float):
    def __new__(cls, ...): 
        ...

    def __repr__(self):
        return str(self) + str(self.units)

IPython で作業しているとき、インスタンスの内容をすばやく確認したいと思います。

>>> a = MyNumber('23.43', ampere=1, second=1, meter=-1)
>>> a
23.43 s·A/m

代わりに、例外が発生します。

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 11: ordinal not in range(128)

そして、私のコンテンツを手動で見ようとすると、次の__repr__ようになります。

>>>a.__repr__()
23.43 s\xc2\xb7A/m 
4

3 に答える 3

-1

問題は、IPython 構成に起因する可能性があります。エンコーディングを確認します。

>>> import sys
>>> sys.getdefaultencoding()
'ascii'

上記のように ASCII を取得すると、Unicode 文字列で問題が発生する可能性があります。

だからこれを試してください:

>>> reload(sys)
>>> sys.setdefaultencoding('utf8')

そして、それはうまくいくはずです...

于 2015-12-06T19:28:30.617 に答える