字符串 - Python编码问题?
PHPz
PHPz 2017-04-18 10:33:39
0
2
521

我用Python3的requests库从一个api请求一个json数据,然后试图去print出来:


    res = requests.get("http://aaa.com/bbb.php")
    res.encoding='utf-8'
    name = res.json(encoding = "utf8")["name"]
    print(name)

也试了一下方法:

name.encode('utf8').decode("utf8")
print(name)

我这个name字符串有可能有中文,数字,英文,也有可能有阿拉伯文。或者只有他们之中的一个。
我每次print的时候有时候能输出成功,有时候有以下错误:

  File "demo.py", line 53, in play_one
    print(json.loads(result_str)["name"])
UnicodeEncodeError: 'gbk' codec can't encode character '\u062f' in position 0: illegal multibyte sequence

我该怎么处理这个字符串,有可能同一个字符串混有不同的编码?还是我获取到的字符串每次都是不同编码的,我应该怎么正确输去这个不确定的字符串?

PHPz
PHPz

学习是最好的投资!

全員に返信(2)
大家讲道理

標準 JSON ではエンコーディングを指定する必要はありません。

簡体字中国語版の Windows を使用している場合、システム コンソールは GBK エンコードで文字を出力する必要がありますが、文字「U+062F د ARABIC LETTER DAL」は GBK エンコードに対応していないため、出力できません。

ファイルに書き込むか、アラビア語版の Windows をインストールするかを選択できます。または、より優れた Unicode サポートを備えた別のオペレーティング システム/端末を使用してください。

いいねを押す +0
小葫芦
  1. まず、なぜリクエストにこの問題が発生するのかを理解する必要があります

リクエストは、サーバーから返された応答ヘッダーの Content-Type から文字セット エンコーディングを取得します。コンテンツ タイプに charset フィールドがある場合、リクエストはエンコーディングを正しく識別できます。それ以外の場合は、デフォルトの ISO-8859-1 を使用します。詳細については、この記事を読んでください。 Python リクエスト ライブラリ 中国語のコーディングの問題

記事内ではいくつかの方法が言及されていますが、3.x ではこの問題が修正されているようです。

  1. 私の提案
    まず手動でページにアクセスして、このページのヘッダー部分の文字セットがGBKであると仮定して、どのようなエンコーディングであるかを確認します

リーリー
いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート