文字列をPythonのUTF-8に変換する方法
-
10-10-2019 - |
質問
UTF-8文字をPythonサーバーに送信するブラウザがありますが、クエリ文字列から取得すると、PythonのリターンがASCIIです。プレーンストリングをUTF-8に変換するにはどうすればよいですか?
注:Webから渡された文字列はすでにUTF-8エンコードされています。Pythonを作成して、ASCIIではなく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")
^ Unicodeに変換し、エンコードを指定します。
他のヒント
上記の方法が機能しない場合は、Pythonに、utf-8に変換できない文字列の一部を無視するように指示することもできます。
stringnamehere.decode('utf-8', 'ignore')
少し過剰かもしれませんが、同じファイルでASCIIとUnicodeを使用すると、デコードを繰り返すことは痛みになる可能性があります。これは私が使用するものです。
def make_unicode(input):
if type(input) != unicode:
input = input.decode('utf-8')
return input
else:
return input
次の行を.pyファイルの上部に追加します:
# -*- coding: utf-8 -*-
このように、スクリプトで文字列を直接エンコードできます。
utfstr = "ボールト"
私があなたを正しく理解しているなら、あなたはあなたのコードにUTF-8エンコードされたバイトストリングを持っています。
バイトストリングをUnicode文字列に変換することは、デコードとして知られています(Unicode-> Byte-Stringはエンコードです)。
あなたはそれを使用してそれを行います Unicode 関数または デコード 方法。また:
unicodestr = unicode(bytestr, encoding)
unicodestr = unicode(bytestr, "utf-8")
または:
unicodestr = bytestr.decode(encoding)
unicodestr = bytestr.decode("utf-8")
city = 'Ribeir\xc3\xa3o Preto'
print city.decode('cp1252').encode('utf-8')
Python 3.6では、組み込みのUnicode()メソッドはありません。文字列は既にユニコードとしてデフォルトで保存されており、変換は必要ありません。例:
my_str = "\u221a25"
print(my_str)
>>> √25
ord()およびunichar()で翻訳します。すべてのUnicode Charには、インデックスのような数が関連付けられています。したがって、Pythonには、Charとその番号の間に翻訳するいくつかの方法があります。欠点はñの例です。それが役立つことを願っています。
>>> C = 'ñ'
>>> U = C.decode('utf8')
>>> U
u'\xf1'
>>> ord(U)
241
>>> unichr(241)
u'\xf1'
>>> print unichr(241).encode('utf8')
ñ