web-dev-qa-db-ja.com

Pythonで文字列をutf-8に変換する方法

私は自分のPythonサーバにUTF-8文字を送るブラウザを持っています、しかし私がクエリ文字列からそれを取り出すとき、Pythonが返すエンコーディングはASCIIです。どうやってプレーン文字列をutf-8に変換できますか?

注:Webから渡された文字列はすでにUTF-8でエンコードされています。PythonでそれをASCIIではなくUTF-8として扱いたいだけです。

171
Bin Chen
>>> plain_string = "Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(<type 'str'>, <type 'unicode'>)

^これはバイト文字列(plain_string)とユニコード文字列の違いです。

>>> s = "Hello!"
>>> u = unicode(s, "utf-8")

^ Unicodeに変換してエンコーディングを指定する。

238
user225312

上記の方法でうまくいかない場合は、utf-8に変換できない文字列の部分を無視するようにPythonに指示することもできます。

stringnamehere.decode('utf-8', 'ignore')
65
duhaime

ちょっとやり過ぎるかもしれませんが、同じファイルでASCIIとUnicodeを扱うとき、デコードを繰り返すのは面倒です。

def make_unicode(input):
    if type(input) != unicode:
        input =  input.decode('utf-8')
        return input
    else:
        return input
19
Blueswannabe

.pyファイルの先頭に次の行を追加します。

# -*- coding: utf-8 -*-

次のように、文字列をスクリプト内で直接エンコードできます。

utfstr = "ボールト"
13
Ken

私があなたを正しく理解していれば、あなたのコードにはUTF-8でエンコードされたバイト文字列があります。

バイト文字列をユニコード文字列に変換することは、デコーディングとして知られています(unicode - > byte-stringはエンコーディングです)。

そのためには、 Unicode 関数または decode メソッドを使用します。どちらか

unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr, "utf-8")

または

unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")
13
codeape
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')
8
Willem

Python 3.6では、組み込みのunicode()メソッドはありません。文字列はデフォルトですでにUnicodeとして格納されているため、変換は不要です。例:

my_str = "\u221a25"
print(my_str)
>>> √25
6
Zld Productions

Ord()とunichar()で変換してください。すべてのUnicode文字には、索引のような番号が関連付けられています。そのため、Pythonには文字と数字の間の変換方法がいくつかあります。欠点は - 例です。それが役立つことを願っています。

>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ
3
Joe9008