回答:
Python3では、リテラル文字列はデフォルトでユニコードです。
それtext
がbytes
オブジェクトであると仮定して、単に使用しますtext.decode('utf-8')
unicode
Python2はPython3と同じなstr
ので、次のように書くこともできます。
str(text, 'utf-8')
必要に応じて。
str
はユニコードです。「デコード」されているため、呼び出しdecode
ても意味がありません
str(text, 'utf-8')
、テキストは文字列バイナリでなければなりません。例str(b'this is a binary', 'utf-8')
Python 3.0の新機能によると:
すべてのテキストはUnicodeです。ただし、エンコードされたUnicodeはバイナリデータとして表されます
確実にutf-8を出力したい場合は、3.0のUnicodeに関するこのページの例を次に示します。
b'\x80abc'.decode("utf-8", "strict")
回避策として、私はこれを使用しています:
# Fix Python 2.x.
try:
UNICODE_EXISTS = bool(type(unicode))
except NameError:
unicode = lambda s: str(s)
try: unicode = str; except: pass
。
unicode = str
2か3で失敗しないので、あなたはそれができるようです
from six import u as unicode
、それはより自己記述ですので、私はより(6 2/3互換性層であるので)単に好むいるunicode = str
このようにして、\ 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❤️❤️ '
Python 3.xで最も簡単な方法
text = "hi , I'm text"
text.encode('utf-8')