Pythonエンコード形式変更問題

anonymity
リリース: 2019-04-20 14:31:01
オリジナル
6598 人が閲覧しました

今日、私は Python クローラーを作成していましたが、クロールされた Web ページが突然異常になり、エラーが報告されました: UnicodeEncodeError: 'latin-1' コーデックは位置 41-50 の文字をエンコードできません: 序数が含まれていませんrange(256); UnicodeEncodeError: 'ascii' コーデックは序数で文字をエンコードできません。これは明らかなエンコード形式の問題です。実際、Python2 や 3 だけでなく、Java や C などの他のプログラミング言語でも、エンコード形式、特に ASCII、gbk、utf-8 とその他のエンコード間の変換で非常に頭の痛い問題が頻繁に発生します。 。そこで情報を検索し、実践的に練習し、このような方法をいくつか見つけました。

まず、Python のシステムエンコード形式と入出力形式を確認するにはどうすればよいでしょうか?

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 エンコーディングの例:

Pythonエンコード形式変更問題

ascii エンコーディング テーブル図の部分:

Pythonエンコード形式変更問題

プログラミングするときは先頭行に忘れずに追加してください:

# -*- 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: &#39;ascii&#39; codec can&#39;t encode characters in position 0-1: ordinal not in range(128)
ログイン後にコピー

文字列を操作するとき、str とバイトの変換が頻繁に発生します。文字化けを避けるために、str と bytes の変換には常に UTF-8 エンコードを使用する必要があります。

フレンドリーリンク【UTF-8エンコーディング変換ツール

python3ビデオチュートリアル

最初はエンコード形式が少ない コンピュータの普及と多くの国や組織での使用により、エンコード形式の人気はますます高まっていますが、国際的に受け入れられているのは依然として UTF-8 であるため、プログラミングの習慣を身につけて UTF-8 を使用する必要があります。エンコード形式がより頻繁に使用されます。エンコードの問題が発生した場合は、エンコード形式の一貫性を保つようにしてください。

以上がPythonエンコード形式変更問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート