utf-8文字をPythonサーバーに送信するブラウザーがありますが、それをクエリ文字列から取得すると、Pythonが返すエンコードはASCIIです。プレーンな文字列をutf-8に変換するにはどうすればよいですか?
注:ウェブから渡された文字列はすでにUTF-8でエンコードされています。PythonでASCIIではなくUTF-8として処理するようにしたいだけです。
"some_string".encode('utf-8').decode('utf-8')
utf-8文字をPythonサーバーに送信するブラウザーがありますが、それをクエリ文字列から取得すると、Pythonが返すエンコードはASCIIです。プレーンな文字列をutf-8に変換するにはどうすればよいですか?
注:ウェブから渡された文字列はすでにUTF-8でエンコードされています。PythonでASCIIではなくUTF-8として処理するようにしたいだけです。
"some_string".encode('utf-8').decode('utf-8')
回答:
>>> plain_string = "Hi!"
>>> unicode_string = u"Hi!"
>>> type(plain_string), type(unicode_string)
(<type 'str'>, <type 'unicode'>)
^これは、バイト文字列(plain_string)とUnicode文字列の違いです。
>>> s = "Hello!"
>>> u = unicode(s, "utf-8")
^ユニコードに変換し、エンコーディングを指定します。
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 2: invalid start byte
これは私のコードです:csvReaderの行のret = []:行のelmのcline = []:unicodestr = unicode(elm、 'utf-8')cline.append(unicodestr)ret .append(cline)
unicode()
ません。すべての文字列はUnicodeであり、存在しません。
u
に戻っstr
形式(変換用u
にバックs
)?
上記のメソッドが機能しない場合は、utf-8に変換できない文字列の一部を無視するようにPythonに指示することもできます。
stringnamehere.decode('utf-8', 'ignore')
少しやり過ぎかもしれませんが、同じファイルでasciiとunicodeを使用すると、デコードを繰り返すのが面倒になる場合があります。これを使用します。
def make_unicode(input):
if type(input) != unicode:
input = input.decode('utf-8')
return input
.pyファイルの先頭に次の行を追加します。
# -*- coding: utf-8 -*-
次のように、スクリプトで文字列を直接エンコードできます。
utfstr = "ボールト"
from __future__ import unicode_literals
先頭に追加するか、u''
プレフィックスを使用します。bytes
リテラルで非ASCII文字を使用しないでください。utf-8バイトを取得するために、utf8bytes = unicode_text.encode('utf-8')
必要に応じて後で行うことができます。
from __future__ import unicode_literals
ASCII以外の文字を含む文字列をutf-8に変換するにはどうすればよい ですか?
私が正しく理解していれば、コードにutf-8でエンコードされたバイト文字列があります。
バイト文字列をユニコード文字列に変換することは、デコードと呼ばれます(ユニコード->バイト文字列はエンコードです)。
これを行うには、Unicode関数またはデコードメソッドを使用します。どちらか:
unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr, "utf-8")
または:
unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")
Python 3.6では、組み込みのunicode()メソッドはありません。文字列はデフォルトですでにユニコードとして保存されており、変換は必要ありません。例:
my_str = "\u221a25"
print(my_str)
>>> √25
はい、追加できます
# -*- coding: utf-8 -*-
ソースコードの最初の行。