English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Pythonでファイルのエンコード形式を設定する実現方法

Pythonで2のpyファイルに中国語を書く場合、ファイルエンコードの宣言行を追加する必要があります。そうしないとpython2はデフォルトでASCIIエンコードを使用します。(python3この問題はもうありません、python3デフォルトのファイルエンコードはUTFです-8)

エンコードコメントは最初の行または第二行に配置する必要があります。一般的には、Pythonファイルの最初の二行は以下のように書かれます:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

最初の行はPython解釈器を指定し、第二行はPythonファイルのエンコード方法を指定します。エンコード方法には以下のような選択肢があります

1. 等号で設定する方法:

#!/usr/bin/python
# coding=<encoding name>

2. 最も一般的には、コロンで始まる(ほとんどのエディタが正しく認識できます):

#!/usr/bin/python
# -*- coding: <encoding name> -*-

3. vimの:

#!/usr/bin/python
# vim: set fileencoding=<encoding name> :

ヘッダーのエンコーディング宣言には以下の効果があります:

コードに中国語のコメントがある場合、この宣言が必要です

高度なエディタ(例えば私のemacs)は、ヘッダー宣言に基づいて、これをコードファイルの形式として認識します。

プログラムはヘッダー宣言を通じて、デコード初期化「人生苦短」のようなunicodeオブジェクトを解読します(したがって、ヘッダー宣言とコードの保存形式は一致する必要があります)

デフォルトのデコード形式を設定します

import sys; # sysモジュールを読み込む,これはsysの最初の読み込みではありません 
reload(sys); # sysを再読み込み 
sys.setdefaultencoding('utf8'); ## setdefaultencoding関数を呼び出します

ここで特に注意すべきは、2行目のreload(sys)です。これは欠かせません。欠けていると正しく動作しません。なぜ再読み込みする必要があるのでしょうか?setdefaultencoding関数がシステムから呼び出された後は削除されるため、importを使用して読み込むと実際には存在しません。したがって、sysモジュールを再読み込みする必要があります。そうすることで、setdefaultencodingが使用可能になり、コードでインタープリタの現在の文字エンコーディングを変更することができます。

PythonのインストールディレクトリのLibフォルダーには、site.pyというファイルがあり、その中でmain() –> setencoding() –> sys.setdefaultencoding(encoding)を見つけることができます。なぜなら、このsite.pyはPythonインタープリタを自動的に読み込むため、main関数は毎回実行されます。setdefaultencoding関数が呼び出された後は削除されますので、importを使用して読み込むと実際には存在しません。したがって、sysモジュールを再読み込みする必要があります。そうすることで、setdefaultencodingが使用可能になり、コードでインタープリタの現在の文字エンコーディングを変更することができます。

关于 sys.defaultencoding,这个在解码没有明确指明解码方式的时候使用。比如我有如下代码:

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
s = '中文' # 注意这里的 str は str タイプの、而不是 unicode 
s.encode('gb18030') 

このコードはsをgb18030の形式、つまりunicode -strの変換にエンコードします。なぜならs自体がstr型であるため、

Pythonは自動的にsをunicodeにデコードし、それをgb18030。なぜなら、デコードはPythonが自動的に行うため、デコード方法を指定していないため、Pythonはsys.defaultencodingで指定された方法でデコードを行います。多くの場合、sys.defaultencodingは

ANSCII、s がこのタイプでない場合にエラーが発生します。上記の例では、sys.defaultencoding は anscii で、s のエンコーディング方式とファイルのエンコーディング方式が一致していますが、utfです。8 の、エラーが発生しました:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 
0: ordinal not in range(128) 

このような場合、エラーを修正するための二つの方法があります:

一是 s のエンコーディング方式を明確に指示する

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
s = '中文' 
s.decode('utf-8).encode('gb18030') 

二是 sys.defaultencoding をファイルのエンコーディング方式に変更する

#! /usr/bin/env python 
# -*- coding: utf-8 -*- 
import sys 
reload(sys) # Python2.5 初期化後に sys.setdefaultencoding このメソッドを削除し、再読み込みする必要があります 
sys.setdefaultencoding('utf-8 
str = '中文' 
str.encode('gb18030')

このpython 設定ファイルエンコーディングの実現方法がすべてです。皆様に参考になれば幸いです。呐喊ガイドを応援していただけると嬉しいです。

声明:本文の内容はインターネットから取得しており、著作権者に帰属します。インターネットユーザーが自発的に提供し、自己でアップロードしたものであり、本サイトは所有権を有しません。また、人工的な編集もなく、関連する法的責任も負いません。著作権侵害を疑う内容が見つかりましたら、以下のメールアドレスまでご連絡ください:notice#oldtoolbag.com(メールを送信する際、#を@に置き換えてください。告発を行い、関連する証拠を提供してください。一旦確認がとれましたら、本サイトは即座に侵害疑いのコンテンツを削除します。)

おすすめ