Pythonの3.0 urllib.parseエラー「タイプstrがバッファAPIをサポートしていません」

StackOverflow https://stackoverflow.com/questions/540342

  •  22-08-2019
  •  | 
  •  

質問

  File "/usr/local/lib/python3.0/cgi.py", line 477, in __init__
    self.read_urlencoded()
  File "/usr/local/lib/python3.0/cgi.py", line 577, in read_urlencoded
    self.strict_parsing):
  File "/usr/local/lib/python3.0/urllib/parse.py", line 377, in parse_qsl
    pairs = [s2 for s1 in qs.split('&') for s2 in s1.split(';')]
TypeError: Type str doesn't support the buffer API

誰がこれを回避する方法で私を指示することはできますか?私はcgi.Fieldstorageに送り、データを通してそれを取得していますし、私はそれを他の方法を行うように見えることはできません。

役に立ちましたか?

解決

urllibはがやろうとしている。

b'a,b'.split(',')

どの動作しません。それらが使用されるよりもバイト文字列とUnicode文字列はPy3kにスムーズにさえ少ないミックス - 。エンコーディングの問題がすぐにではなく、後に間違って行く作るために、故意に

だから、エラーではなく不透明に「あなたはurllib.parseするバイト文字列を渡すことはできません」あなたを語っています。おそらくあなたは、フォームエンコードされた文字列は、コンテンツ本体としてCGIに来ているPOSTリクエストを、やっています。それが今、新しいurllibはと衝突して、コンテンツ本体はまだバイト文字列/ストリームである。

そうそう、それはcgi.pyのバグで、まだ新しい文字列モデルのために適切に固定されていない2to3は、変換の別の犠牲者です。これは、urllibはに渡す前に文字に入ってくるバイトストリームを変換する必要があります。

私は、Python 3.0のライブラリ(特にWeb関連のもの)、まだかなりshonkyことを言及しましたか? : - )

他のヒント

Pythonのチュートリアルから( http://www.python.org/doc /3.0/tutorial/stdlib.html の)urlopen方法を用いた例があります。これは、同じエラーを発生させます。

for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
    if 'EST' in line or 'EDT' in line:  # look for Eastern Time
        print(line)

あなたは正しいエンコーディングを文字列にバイトthingoを変換するために、STR機能を使用する必要があります。次のように:

for line in urlopen('http://tycho.usno.navy.mil/cgi-bin/timer.pl'):
    lineStr = str( line, encoding='utf8' )
    if 'EST' in lineStr or 'EDT' in lineStr:  # look for Eastern Time
        print(lineStr)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top