• ベストアンサー

pythonのエンコードについて

#-*- coding: cp932 -*- import urllib urlname=urllib.quote(u"(株)エイブル".encode('euc-jp')) print urlname は上手く動くのですが、変数を用意して #-*- coding: cp932 -*- import urllib company2= "(株)エイブル" print company2 urlname=urllib.quote(u(company2).encode('euc-jp')) print urlname のように書きたいのですが変数を用意したときの urlname=urllib.quote(u(company2).encode('euc-jp')) の書き方がイマイチよくわかりません。簡単なことだと思うのですがよろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

unicode(company2, "cp932").encode("euc-jp")

dfadsfadad
質問者

補足

すみません。ちょっとうまくいかないので質問させてください。 #-*- coding: cp932 -*- import urllib company2= "(株)エイブル" urlname=urllib.quote(company2, "cp932").encode("euc-jp") urlname2=urllib.quote(u"(株)エイブル".encode('euc-jp')) urlname3=unicode(company2, "cp932").encode("euc-jp") print urlname print urlname2 print urlname3 結果 %28%8A%94%29%83G%83C%83u%83%8B %28%B3%F4%29%A5%A8%A5%A4%A5%D6%A5%EB (ウ・・ィ・、・ヨ・・ となるのですが真ん中の文字列にurlnameとurlname3にしたいのですが どうしたらよいでしょうか。なんどもすみません。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

urllib.quoteの入力として与えるのは unicode(company2, "cp932").encode("euc-jp") の結果ですから、 urllib.quote(unicode(company2, "cp932").encode("euc-jp")) です。 urlname=urllib.quote(company2, "cp932").encode("euc-jp") では、 urllib.quote(company2, "cp932") の結果を encode() に渡すことになります。 二つ目と三つ目は書くまでもないですね。

dfadsfadad
質問者

お礼

ありがとうございました。 問題解決しました。 解説のコメントをしていただいて誠にありがとうございました。

関連するQ&A

  • Pythonスクリプトが実行できない

     インターネット上で公開されているスクリプトなのですが、実行しようとするとエラーが出てしまいます。どうすれば正しく実行することができるのか、分かる方教えていただけると助かります。よろしくお願いします。  エラーメッセージはスクリプトの下に記載します。  ニコニコ動画にログインし、マイページに新規マイリストを作成して、任意の動画をマイリストに登録するスクリプトです。 #!/usr/bin/env python #coding: utf8 userid="ここにメールアドレスを入力" passwd="ここにパスワードを入力" import sys, re, cgi, urllib, urllib2, cookielib, xml.dom.minidom, time import simplejson as json def getToken(): html = urllib2.urlopen("http://www.nicovideo.jp/my/mylist").read() for line in html.splitlines(): mo = re.match(r'^\s*NicoAPI\.token = "(?P<token>[\d\w-]+)";\s*',line) if mo: token = mo.group('token') break assert token return token def mylist_create(name): cmdurl = "http://www.nicovideo.jp/api/mylistgroup/add" q = {} q['name'] = name.encode("utf8") q['description'] = "" q['public'] = 0 q['default_sort'] = 0 q['icon_id'] = 0 q['token'] = token cmdurl += "?" + urllib.urlencode(q) j = json.load( urllib2.urlopen(cmdurl), encoding='utf8') return j['id'] def addvideo_tomylist(mid,smids): for smid in smids: cmdurl = "http://www.nicovideo.jp/api/mylist/add" q = {} q['group_id'] = mid q['item_type'] = 0 q['item_id'] = smid q['description'] = u"" q['token'] = token cmdurl += "?" + urllib.urlencode(q) j = json.load( urllib2.urlopen(cmdurl), encoding='utf8') time.sleep(0.5) #ログイン opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar())) urllib2.install_opener(opener) urllib2.urlopen("https://secure.nicovideo.jp/secure/login", urllib.urlencode( {"mail":userid, "password":passwd}) ) #トークン取得 token = getToken() #マイリストの作成と動画の登録 mid = mylist_create(u"テストリスト") addvideo_tomylist(mid, ["sm9","sm1097445", "sm1715919" ] ) <エラーメッセージ> >>> #?^í?^°?^¤?^ó ... opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookielib.CookieJar())) >>> urllib2.install_opener(opener) >>> urllib2.urlopen("https://secure.nicovideo.jp/secure/login", ... urllib.urlencode( {"mail":userid, "password":passwd}) ) <addinfourl at 4311877104 whose fp = <socket._fileobject object at 0x101007758>> >>> #?^?^??^ü?^¯?^ó?^?^??^? ... token = getToken() Traceback (most recent call last): File "<stdin>", line 2, in <module> File "<stdin>", line 8, in getToken UnboundLocalError: local variable 'token' referenced before assignment >>> #?^?^??^¤?^ê?^¹?^?^??^???^??^?^??^???^?^??^Ի?^???^ٻ?^̲ ... mid = mylist_create(u"?^?^??^¹?^?^??^ê?^¹?^?^?") Traceback (most recent call last): File "<stdin>", line 2, in <module> File "<stdin>", line 9, in mylist_create NameError: global name 'token' is not defined >>> addvideo_tomylist(mid, ["sm9","sm1097445", "sm1715919" ] ) Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'mid' is not defined >>> <環境>imac, mac os x, ターミナルを使用

    • 締切済み
    • Mac
  • pythonでtwitterAPIを使用としたときのGAE上でのエラー

    pythonでtwitterAPIを使用としたときのGAE上でのエラー <class 'urllib2.HTTPError'>: HTTP Error 401: Unauthorized GAE上にこの様なエラーが出てしまい。twitterbotに反映されません。 import urllib2は行っているのですが原因が分からず困っています。 よろしくお願いします # -*- coding: utf-8 -*- import twitter import random import os # from tenki import information from google.appengine.api import users from google.appengine.ext import webapp from google.appengine.ext.webapp import util from google.appengine.ext.webapp import template # twitter.Api.__init__ method for override. def twitter_api_init_gae(self, username=None, password=None, input_encoding=None, request_headers=None): import urllib2 from twitter import Api self._cache = None self._urllib = urllib2 self._cache_timeout = Api.DEFAULT_CACHE_TIMEOUT self._InitializeRequestHeaders(request_headers) self._InitializeUserAgent() self._InitializeDefaultParameters() self._input_encoding = input_encoding self.SetCredentials(username, password) # 天気用に追加 # from urllib2 import urlopen # from xml.dom.minidom import parseString # from xml.etree.ElementTree import * # information = [] # io = urlopen("http://www.google.com/ig/api?weather=Tokyo") # dom = ElementTree(file=io) # cond = dom.find("//current_conditions") # for name in ["condition","temp_c","humidity","wind_condition"]: # information.append(cond.find(name).get("data")) # overriding API __init__ twitter.Api.__init__ = twitter_api_init_gae list = [ u"ante" ,u"Do my best" ,u"piyopiyopiyo" ,u"piyopiyo" ,u"ponyo" ,u"piyo" ,u"my name is anteroom" # ,u"Today's weather is " + information[0] # ,u"Today's weather is " + information[1] # ,u"Today's weather is " + information[2] # ,u"Today's weather is " + information[3] ] post = random.choice(list) api = twitter.Api("hoge","hoge") api.PostUpdate(post)

  • pythonのプログラムを走らせるには?

    使用するソフトウェアの関係でWeb(HTMLまたはPHP)とPythonの連携が必要になりました。 しかしPythonをWebで扱ったことがなくいまいちどうしたらいいのか分りません。 <form action="/python/pythontest.py" method="GET">  <input type="submit" name="submit" value="更新"> </form> といった形で呼び出しているのですがファイルが開かれるだけでptythonのプログラムが実行されません。 pythonのプログラムは #!/usr/bin/env python # coding: utf-8 import cgi from datetime import datetime html_body = u""" <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> </head> <body> %s </body> </html>""" content='' print "Content-type: text/html;charset=utf-8\n" print (html_body % content).encode('utf-8') と書いています。 何が原因なのでしょうか? /usr/bin/env python のパスがうまく通っていないからでしょうか?

    • ベストアンサー
    • HTML
  • Pythonプログラムのエラー

    こんにちは。pythonプログラムを勉強しはじめたばかりのものです。 次のプログラムが最後の行の#のところでエラーになってなかなか 解決ができません。アドバイスいただけませんでしょうか。 #! /python30/python # coding:shift_jis import sys, os, urllib, gzip def GetAndGzip(url, out): ''' urlを読み込み、gzipで圧縮してファイルoutに出力 ''' remote = urllib.urlopen(url).read() gzfile = gzip.GzipFile(filename='', mode='web', fileobj=out) gzfile.write(remote) gzfile.colse() #パラメータを抽出 if len(sys.argv) <> 2: print '使い方:python wgetgz.py url' else: url = sys.argv[1] GetAndGzip(url, sys.stdout) #ここでエラーin<module> #ここで投稿すると、インデントがなくなってしまうようです。

  • PythonのUnicode文字について 

    PythonのUnicode文字について  最近pythonを始めました。このサイト(http://www.pythonweb.jp/index.html)でいろいろと勉強しているのですがUnicode文字についてよくわかりません。 #coding: UTF-8 print u"こんにちは" と入力するとなぜか File "test.py", line 2 print u"こんにちは" SyntaxError: (unicode error) 'utf8' codec can't decode byte 0x82 in position 0: unexpected code byteと表示され出力されませんでした。何故でしょうか。unicode文字についても説明をお願いします。

  • 半角→全角変換

    数値、記号、カナのすべてを半角から全角に変換したく Encode::JP::H2Zを利用しサンプルプログラムを書いてみました。 セーブは、s-jisで行っているのですが以下のコードを試しましたがまったく変換されません。何処がいけないのでしょうか? 以下を実行すると、 h2z: 012ABCabc!@#ア??ガダパ h2z: となってしまいます。 #!/usr/bin/perl use Encode; use Encode::JP::H2Z; my $str_h = ' 012ABCabc!@#アイウガダパ'; my $str_2 = '  012AbCabc!@#アイウガダパ'; my $char_conv; $char_conv = Encode::encode("euc-jp", $str_h); Encode::JP::H2Z::h2z(\$char_conv); $char_conv = Encode::decode("euc-jp", $char_conv); print " h2z:" . $char_conv . "\n"; $char_conv = Encode::encode("euc-jp", $str_h2); Encode::JP::H2Z::h2z(\$char_conv); $char_conv = Encode::decode("euc-jp", $char_conv); print " h2z:" . $char_conv . "\n";

    • ベストアンサー
    • Perl
  • Pythonでリストをテキストファイルへ

    こんにちは。 Pythonで、 ls=['ab\n','cde\n']  というリストをテキストファイルに書き出して、 ファイルの中身を ab(改行) cde(改行) とするには、どうやったらよいのでしょうか? 次のプログラムを動かすと、 #! /python30/python # coding:shift_jis import io s1=['ab','cde'] with open('foo1.txt',mode='wt',encoding='cp932') as f: print(s1,file=f) ファイルの中身は ['<script > 本日は\n', '</script><td></td>\n'] なってしまいます。

  • pythonでスクレイピングがうまく出来ません

    python2.7でbeautifulsoupを用いて、netkeiba.comから競馬情報(騎手の成績)をスクレイピングしています。 定法に基づきまして、『検証』からページのツリー構造を把握して、プログラムを作成しました。 馬名部分の構造が<td class="txt_l"> <a href="/horse/2011105901">テンテマリ</a></td> #テンテマリは馬名 となっておりましたので、"txt_l"を拾い出せるようにスクリプトを作りました。 しかしながら、 馬名以外の"txt_l"は全部スクレイピング出来るのですが、馬名部分だけがNoneと返ってまいります。 エラーメッセージではありませんが、何が原因でNoneとなるのかが、どうしても分かりません。 ちなみに、馬名以外で、ほぼ同様の構造を持つ、『レース名』、構造は <td class="bml txt_l"> <a href="/race/201603020812/" title="3歳上500万円下">3歳上500万円下</a> (3歳上500万円下はレース名) では、問題なくレース名を拾うことが出来ました。 該当のソースコード -*- coding:utf-8 -*- import urllib2 import codecs from bs4 import BeautifulSoup tpl_url='http://db.netkeiba.com/?pid=jockey_detail&id=00663&page={0}' for i in xrange( 1, 2 ): url=tpl_url.format( i ) soup = BeautifulSoup(urllib2.urlopen(url).read(),"lxml") tr_arr = soup.find('div', {'id':'contents_liquid'}).findAll('tbody') for tr in tr_arr: lrg1 = tr.findAll('td',{'class':'txt_l'}) for tr1 in lrg1: print tr1.string 試したこと 馬名以外の('td',{'class':'txt_l'})に準ずる『レース名』は、うまく拾うことが出来ました。 lrg1 = tr.findAll('td',{'class':'txt_l'}) で馬名を得ることが出来ない理由、併せて馬名を拾えるスクリプトを御教示くださいますよう、よろしくお願いいたします!

  • WebのPythonでの値の受け渡し

    現在PythonでWebサイトの作成を行っております。 自分のやり方の問題だとは思っているのですが文字列としてページAからページBに値を渡すことはできるのですが変数の状態で送ることができずに困っています。 現在のコードはこのように書いています。 >>> 渡す側 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> #! /usr/bin/env python # coding: utf-8 html_body= u""" <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>タイトル</title> <link rel="stylesheet" href="../../css/library.css"> </head> <body> <h1>ヘッダー</h1> 数秒後に移動</br> <meta http-equiv="refresh" content="3;URL="index.py"?id={0}"> </body> </html>""" print "Content-type: text/html;charset=utf-8\n" print ( html_body.format([0,1,2,3]) ).encode('utf-8') この方法でid={0}の部分で値を渡しています。 しかし、その前に文字列になってしまっているため受け取り側での処理がいろいろと面倒だったり 渡す際にいろいろ処理をしてから渡さないとならず手間がかかります。 どのように改善すれば良いでしょうか?

    • ベストアンサー
    • HTML
  • Python について質問です

    私はPythonの初心者です。 今Python でCSVのファイルを読んで数値だけ(数値以外に文字列や空白などがあります)を計算処理出来なくて困っています。教えて頂けませんか? 質問は、BB.csvというファイルの数値だけの合計と平均を計算したいです。 私のコードは以下です。 # coding: utf-8 import csv import re import string DATAFILE = 'BB.csv' class UnicodeDictReader(csv.DictReader): def __init__(self, f, fieldnames=None): csv.DictReader.__init__( self, f, fieldnames) def main(): total = 0 all_sum = 0 line_num = 0 with open(DATAFILE) as csvfile: reader = UnicodeDictReader(csvfile) for record in reader: # 値を数値で取得 A = int(record['38186']) B = int(record['38181']) C = int(record['38143']) item_total = A + B + C total = item_total all_sum += item_total line_num += 1 average = all_sum / reader.line_num print(" %d + %d + %d = %d " % ( A, B, C, total)) print(u"合計 %d " % all_sum) print(u"平均 %d " % average) if __name__ == '__main__': main() BB.csvは以下です、 38186,38181,38143 1,1,4 1,1,4 ,, ,, 2020,2020,2020 1412,1412,1412 625,625,625 75,75,75 75,75,75 75,75,75 75,75,75 4,4,4 4,4,4 4,4,4 7828,7828,7828 X,, 0,0,0 0,0,0 ○,, 0,0,0 0,0,0 0,0,0 ,,AAA 0,0,0 0,0,0 0,0,0 ,BBB, 0,0,0 0,0,0 0,0,0 ,, 0,0,0 ,, 0,0,0 0,0,0 ,, 0,0,0 0,0,0 750,750,750 400,400,400 400,400,400 ,, 0,0,0 0,0,0 0,0,0 ,, 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 6,6,6 6,6,6 18,18,18 18,18,18 18,18,18 18,18,18 18,18,18 16,16,16 16,16,16 6,6,6 6,6,6 18,18,18 18,18,18 18,18,18 18,18,18 18,18,18 11,11,11 11,11,11 11,11,11 3,3,3 3,3,3 3,3,3 3,3,3 4,4,4 4,4,4 3,3,3 3,3,3 16,16,16 16,16,16 16,16,16 14,8,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 15,15,15

専門家に質問してみよう