今日、私は Python クローラーを作成していましたが、クロールされた Web ページが突然異常になり、エラーが報告されました: UnicodeEncodeError: 'latin-1' コーデックは位置 41-50 の文字をエンコードできません: 序数が含まれていませんrange(256); UnicodeEncodeError: 'ascii' コーデックは序数で文字をエンコードできません。これは明らかなエンコード形式の問題です。実際、Python2 や 3 だけでなく、Java や C などの他のプログラミング言語でも、エンコード形式、特に ASCII、gbk、utf-8 とその他のエンコード間の変換で非常に頭の痛い問題が頻繁に発生します。 。そこで情報を検索し、実践的に練習し、このような方法をいくつか見つけました。
まず、Python のシステムエンコード形式と入出力形式を確認するにはどうすればよいでしょうか?
>>> import sys >>> sys.getdefaultencoding()# 系统默认编码格式 'UTF-8' >>> sys.stdout.encoding# 输入输出格式 'US-ASCII'
この場合、現在のコマンド ラインの入出力エンコーディングが ASCII であることを意味するため、環境変数 LANG を手動で次のように変更する必要があります。 utf-8:
export LANG="en_US.UTF-8"
ubuntu 環境の場合は、上記のコマンド行を ~/.bashrc に追加して問題を完全に解決できます。追加後、次のコマンドを実行してください。有効にするか再起動してください。
source ~/.bashrc
または、別の方法は、Python のみに対応するエンコーディングを設定することです (上記と同じ、コマンド ラインを実行するか、bashrc ファイルを追加します):
PYTHONIOENCODING='utf_8' export PYTHONIOENCODING
gbk エンコーディングの例:
ascii エンコーディング テーブル図の部分:
プログラミングするときは先頭行に忘れずに追加してください:
# -*- coding: utf-8 -*-
コマンドラインを使用してPythonエンコーディングを設定できますが、このセッションでのみ有効になります
>>>sys.getdefaultencoding()查看当前编码(若报错,先执行>>>import sys >>>reload(sys)); >>>sys.setdefaultencoding('utf8')设置编码
SYSモジュールをリロードしてプログラムコードにuft-8を設定することも可能ですが、 pycharm
import sys reload(sys) sys.setdefaultencoding('utf8') 重启Python解释器,发现编码已被设置为utf8; 这是因为系统在Python启动的时候,自行调用该文件,设置系统的默认编码,而不需要每次都手动加上解决代码,属于一劳永逸的解决方法。
でエラーが表示されます。 通常の開発では、トランスコーディング操作にデコードとエンコードを使用することは誰もが知っています。
Decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。 Encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
最新の Python 3 バージョンでは、文字列の型は str で、メモリ内では Unicode で表されます。1 文字は数バイトに対応します。
これをネットワーク ディスクに転送または保存するには、str をバイト単位のバイトに変換する必要があります。
Unicode で表現された Str は、encode() メソッドを使用して指定したバイトにエンコードできます。次に例を示します。
>>> 'ABC'.encode('ascii') b'ABC' >>> '中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87' >>> '中文'.encode('ascii') Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
文字列を操作するとき、str とバイトの変換が頻繁に発生します。文字化けを避けるために、str と bytes の変換には常に UTF-8 エンコードを使用する必要があります。
フレンドリーリンク【UTF-8エンコーディング変換ツール】
最初はエンコード形式が少ない コンピュータの普及と多くの国や組織での使用により、エンコード形式の人気はますます高まっていますが、国際的に受け入れられているのは依然として UTF-8 であるため、プログラミングの習慣を身につけて UTF-8 を使用する必要があります。エンコード形式がより頻繁に使用されます。エンコードの問題が発生した場合は、エンコード形式の一貫性を保つようにしてください。
以上がPythonエンコード形式変更問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。