web-dev-qa-db-ja.com

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

私はこれを使用しました:

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

しかし、Python 3でエラーが発生します(または...何かを含めるのを忘れたのかもしれません)。

NameError: global name 'unicode' is not defined

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

90
cnd

Python3では、リテラル文字列はデフォルトでUnicodeです。

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

Python2のunicodeは、Python3のstrと同等であるため、次のようにも記述できます。

str(text, 'utf-8')

ご希望の場合。

122
John La Rooy

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

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

Python 3.0の新機能 言います:

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

Utf-8を出力していることを確認したい場合は、このページの .0のユニコード の例をご覧ください。

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

python 3.x の最も簡単な方法

text = "hi , I'm text"
text.encode('utf-8')
0
mosi_kha

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

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

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

しかし、このプログラムは以下で動作することが判明しました。

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

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

0
Per Persson

これにより、\ 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
Ilyas