web-dev-qa-db-ja.com

python 3および2で機能するUnicodeリテラル

だから私はpythonスクリプトを持っていて、便宜上python 3.2と2.7で作業したいと思っています。

両方で機能するUnicodeリテラルを使用する方法はありますか?例えば。

#coding: utf-8
whatever = 'שלום'

上記のコードでは、python 2.x(u'')およびpython 3.xで、その小さなuは構文エラーを引き起こします。

37
ubershmekel

編集-Python 3.3なので、_u''_リテラルが再び機能するため、u()関数は必要ありません。

最良のオプションは、Python 2の文字列オブジェクトからUnicodeオブジェクトを作成するメソッドを作成することですが、Python 3(そのまま)では文字列オブジェクトをそのままにしますすでにユニコード)。

_import sys
if sys.version < '3':
    import codecs
    def u(x):
        return codecs.unicode_escape_decode(x)[0]
else:
    def u(x):
        return x
_

次に、次のように使用します。

_>>> print(u('\u00dcnic\u00f6de'))
Ünicöde
>>> print(u('\xdcnic\N{Latin Small Letter O with diaeresis}de'))
Ünicöde
_
27
Lennart Regebro

3.0、3.1、および3.2では:

from __future__ import unicode_literals

ソースbershmekel 、質問中。オリジナルについては リビジョン4 を参照してください。

0
wjandrea