Python3でUnicode文字列を作成する方法


98

私はこれを使いました:

u = unicode(text, 'utf-8')

しかし、Python 3でエラーが発生する(または...何かを含めるのを忘れた可能性があります):

NameError: global name 'unicode' is not defined

ありがとうございました。


17
python 3にアップグレードする素晴らしい理由がある場合、デフォルトではUnicodeです。
JBernardo

回答:


136

Python3では、リテラル文字列はデフォルトでユニコードです。

それtextbytesオブジェクトであると仮定して、単に使用しますtext.decode('utf-8')

unicodePython2はPython3と同じなstrので、次のように書くこともできます。

str(text, 'utf-8')

必要に応じて。


58
TypeError:strのデコードはサポートされていません
Gank

9
@ Gank、Python3ではa strはユニコードです。「デコード」されているため、呼び出しdecodeても意味がありません
John La Rooy

同じTypeError。str(txt)または以下の@magicrebirthのコードに置き換えてください
Simon

3
元のサンプルは明確ではありません。そのため、python3では、必要な場合str(text, 'utf-8')、テキストは文字列バイナリでなければなりません。例str(b'this is a binary', 'utf-8')
killua8p

10

Python 3.0の新機能によると:

すべてのテキストはUnicodeです。ただし、エンコードされたUnicodeはバイナリデータとして表されます

確実にutf-8を出力したい場合は、3.0のUnicodeに関するこのページの例を次に示します。

b'\x80abc'.decode("utf-8", "strict")

1
これは、Python 2の '\ x80abc'.decode( "utf-8"、 "strict")に必要なものです。ありがとう
workplaylifecycle

9

回避策として、私はこれを使用しています:

# Fix Python 2.x.
try:
    UNICODE_EXISTS = bool(type(unicode))
except NameError:
    unicode = lambda s: str(s)

12
なぜラムダ関数を使用しているのですか?これらのメソッドは、どの場合でも同じ方法で呼び出されます。これはより簡単なバリエーションです try: unicode = str; except: pass
Nicolas Bouliane 2017年

1
unicode = str2か3で失敗しないので、あなたはそれができるようです
ニコライ

それともfrom six import u as unicode、それはより自己記述ですので、私はより(6 2/3互換性層であるので)単に好むいるunicode = str
Nickolai

3

このようにして、\ uFE0F、\ u000Aなどの文字を変換する問題を解決しました。また、16バイトでエンコードされた絵文字も使用しています。

example = 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\\uD83D\\uDE0D\\uD83D\\uDE0D\\u2764\\uFE0F Present Moment Caf\\u00E8 in St.Augustine\\u2764\\uFE0F\\u2764\\uFE0F '
import codecs
new_str = codecs.unicode_escape_decode(example)[0]
print(new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream\ud83d\ude0d\ud83d\ude0d❤️ Present Moment Cafè in St.Augustine❤️❤️ '
new_new_str = new_str.encode('utf-16', 'surrogatepass').decode('utf-16')
print(new_new_str)
>>> 'raw vegan chocolate cocoa pie w chocolate & vanilla cream😍😍❤️ Present Moment Cafè in St.Augustine❤️❤️ '

0

私が長年使用していたPython 2プログラムでは、次の行がありました。

ocd[i].namn=unicode(a[:b], 'utf-8')

これはPython 3では機能しませんでした。

ただし、プログラムは次のように動作することがわかりました。

ocd[i].namn=a[:b]

そもそもなぜユニコードをそこに置いたのか覚えていませんが、名前にスウェーデン語の文字åäöÅÄÖが含まれている可能性があるためだと思います。しかし、「ユニコード」がなくても機能します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.