Python は中国語の文字エンコーディングの問題を解決します: Unicode Decode Error_python
前書き
最近、プロジェクトの必要性により、中国語を含む txt ドキュメントを読み取り、ファイルを保存する必要があります。この文書は以前、base64 でエンコードされていたため、すべての漢字が読み取られ、文字化けして表示されていました。プロジェクト チームが Base64 を放棄した後、2 つのエラーが連続して発生しました:
ascii codec can't encode characters in position ordinal not in range 128 UnicodeDecodeError: ‘utf8' codec can't decode byte 0x。
ASCII、Unicode、utf-8 について知らない場合は、文字列とエンコーディングに関するこの前の記事を読むことができます
その後、次の 3 つの概念を理解してください:
ascii は数字、英語の文字、一部の特殊記号のみを表現できますが、中国語の文字は表現できません
Unicode と utf-8 は両方とも中国語の文字を表現できます、unicode は固定長、utf です-8は可変長です
メモリ内の保存方法は一般的にunicodeで、ディスクファイルの保存方法は一般にutf-8です。utf-8はストレージスペースを節約できるためです
それではPythonのデフォルトとは何ですかエンコーディングは?
>>> import sys >>> sys.getdefaultencoding() 'ascii' >>> reload(sys) <module 'sys' (built-in)> >>> sys.setdefaultencoding('utf-8') >>> sys.getdefaultencoding() 'utf-8'
Python のデフォルトのエンコーディングは、sys.setdefaultencoding('utf-8')
関数を通じて設定できます。 sys.setdefaultencoding('utf-8')
函数设置python的默认编码。
python中可以通过encode和decode的方式改变数据的编码,比如:
>>> u'汉字' u'\u6c49\u5b57' >>> u'汉字'.encode('utf-8') '\xe6\xb1\x89\xe5\xad\x97' >>> u'汉字'.encode('utf-8').decode('utf-8') u'\u6c49\u5b57'
我们可以通过这两个函数设置编码。
那么,python中的str是什么类型?
>>> import binascii >>> '汉字' '\xba\xba\xd7\xd6' >>> type('汉字') <type 'str'> >>> print binascii.b2a_hex('汉字') babad7d6 >>> print binascii.b2a_hex(u'汉字') 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) >>> print binascii.b2a_hex(u'汉字'.encode('utf-8')) e6b189e5ad97 >>> print binascii.b2a_hex(u'汉字'.encode('gbk')) babad7d6
binascii是将数据的二进制转换成ascii,上面的解释是:‘汉字'的类型是str,二进制是babad7d6,u‘汉字'是无法转换成ascii,这样就报出了开头的第一个错误。解决办法就是把它.encode(‘utf-8')成str类型。因为我命令行是windows默认的GBK编码,所有u'汉字'.encode(‘gbk')
- これら 2 つの関数を通じてエンコーディングを設定できます。
では、Python の str はどのような型でしょうか?
import sys reloads(sys) sys.setdefaultencoding('utf-8')
import codecs codecs.open(file_name, "r",encoding='utf-8', errors='ignore')
binascii はデータのバイナリを ASCII に変換します。上記の説明は次のとおりです。「漢字」の型は str で、バイナリは babad7d6 です。u「漢字」は ASCII に変換できません。と報告されています 冒頭の最初の間違い。解決策は、 .encode('utf-8') して str 型に変換することです。私のコマンドラインは Windows のデフォルトの GBK エンコーディングを使用しているため、すべての u'中国語文字'.encode('gbk')
が使用されている場合、出力結果は「中国語文字」の結果と同じになります。
要約すると、Python の str は実際には Unicode の一種です。非 ASCII を ASCII に変換すると、エラーが報告されます。
encode (' 適切なエンコーディング') => str
str => decode('適切なエンコーディング') => unicode、これで保存できます。大変苦労しました:
🎜🎜rrreee🎜🎜🎜 2 番目の問題では、ファイルの読み取り時にエラーが発生します。 UTF-8 ファイルには BOM モードと BOM なしモードの 2 つのモードがあります。この 2 つの違いは、BOM ファイルには BOM なしファイルよりもヘッダーが 1 つ多いため、UTF-8 モードでファイルを読み取るときにエラーが発生することのようです。以前、ファイルを読み込もうとしたのですが、まずBOMがあるかどうかを判断してBOMファイルのヘッダーを読み飛ばしてしまい、失敗してしまいました~~。 🎜🎜具体的な操作方法は、コーデックライブラリを使用してファイルを読み取ることです(このライブラリはファイルのヘッダーを検出するためのものだと思います)。 🎜🎜🎜rrreee🎜🎜🎜 エンコードの問題については、ascii、unicode、utf-8 の動作原理を理解する必要があります。 🎜🎜中国語の文字エンコーディングの問題に対する Python の解決策の詳細については、Unicode Decode Error_python 関連記事、PHP 中国語 Web サイトに注目してください。 🎜
ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...
