ダウンロードするファイルの文字コードを動的に変更
ダウンロードするファイルの文字コードを動的に変更 ウェブアプリケーションの中でCSVやテキストファイルをダウンロードさせた時に文字化けが発生する事があります。使用する文字コードが決まっていれば予め固定してしまう事で文字化 […]
Filter by Category
ダウンロードするファイルの文字コードを動的に変更 ウェブアプリケーションの中でCSVやテキストファイルをダウンロードさせた時に文字化けが発生する事があります。使用する文字コードが決まっていれば予め固定してしまう事で文字化 […]
画像のアップロード Google Colaboratoryで画像をアップロードして表示する方法です。画像解析以外にもCSVのアップロードなどの際にも同じ方法でアップロードできます。 画像のインライン表示 今度はアップロー […]
2019年10月18日(金)の上毛新聞に掲載されました
PostgreSQLと通信するページで502 Bad Gateway Djangoで開発したWebアプリでPostgreSQLと通信するページにアクセスした時に、502 Bad Gatewayが発生したので調べた内容と解 […]
第5回 群馬ベンチャーサミットに代表の石井が登壇します 「第5回 群馬ベンチャーサミット」概要 開催日時:2019年9月7日(土) 13:00 ~ 17:30 会場:群馬会館(群馬県前橋市大手町2-1-1) 主催(共同主 […]
2019年8月29日(木)のぐんま経済新聞に掲載されました。
誠に勝手ながら、弊社では下記日程を夏季休業とさせていただきます。 夏季休業期間 2019年8月10日(土)~8月18日(月) 期間中にいただきましたお問い合わせにつきましては、夏季休業期間後の8月19日(火)より順次対応 […]
株式会社ファントムは、経済産業省「情報処理支援機関(スマートSMEサポーター)」に認定されました。 2019年6月28日 認定認定番号:第5号‐19060023
2019年7月19日(金)の桐生タイムスに、弊社代表の石井が掲載されました。
以下の2つの記事の応用編です。 今回のポイントは以下の2つです。 ・気温の処理を関数化・Matplotlibで複数のグラフを出力 コードはGitHubリポジトリにあげています。 コード 出力結果 以下の様な気温と降水確率 […]
前回作った気象庁のサイトからBeautifulSoup4を使ってスクレイピングするプログラムの応用編として、今回はiOSアプリのPythonistaを使って最高気温と最低気温をグラフ化します。グラフ化にはMatplotl […]
気象庁の天気予報をBeautifulSoup4でスクレイピングします。サンプルとして群馬県の週間天気予報(場所、日付、曜日、最高気温、最低気温)を取得します。 コードはGitHubリポジトリにあげています。 週間天気予報 […]
DjangoでSQLログを出力して確認する方法です。SQLログをリアルタイムで出力して、どういうクエリがどのタイミングで実行されているのか確認できます。設定方法は簡単で、DEBUG = Trueになっている状態でsett […]
Dockerで動いているPostgreSQLにデータをリストアする方法です。書き出したPostgreSQLのdumpファイル(リストア用データ)はデスクトップに置いてあるという前提で進めます。 ディレクトリ構造 Dock […]
Djangoで開発中のWebアプリで特定のURLにアクセスした時だけ、502 Bad Gatewayが頻発する様になりました。NginxとuWSGIのログを見たらuWSGIのworkerが死んで復活してを繰り返しているこ […]
DjangoでデータベースにPostgreSQLを使ってる際に以下のエラーが出た時の対処方法です。 サーバーのPostgreSQLのディレクトリに移動します。VERSIONの部分はインストールされているバージョンを入力し […]
前回からの続きです。 チャンネルレイヤーを有効化 チャンネルレイヤーを使用するためにバックエンドにRedisを使用します。Redisを使用するためにDockerを起動します。 以下のコマンドを実行してRedisを起動しま […]
前回からの続きです。 ルームビューを作成 chat > templates > chat > room.htmlを作成します。 ルームビューを表示するためのviewを作成します。 ルームビューへのurl […]
こちらのチュートリアルと同じ内容です。https://channels.readthedocs.io/en/latest/tutorial/index.html 環境 Python 3.7.0Django 2.2.2ch […]
Beautiful Soupで以下のようなHTMLのoptionタグのvalueを取得する方法です。 optionタグのvalueの値を取得する方法 soup = soup.find_all('option')optio […]
ダウンロードするファイルの文字コードを動的に変更
ウェブアプリケーションの中でCSVやテキストファイルをダウンロードさせた時に文字化けが発生する事があります。使用する文字コードが決まっていれば予め固定してしまう事で文字化けは防げますが、端末やOSが異なる環境で不特定多数が利用する場合にはクライアントに合わせて動的に文字コードを変更する必要があります。その際にクライアントのUserAgentからOSやブラウザ環境を取得して適切な文字コードでダウンロードさせる方法です。
Djangoでは以下のコードでクライアントのUserAgentが取得できます。
user_agent = request.META['HTTP_USER_AGENT']
取得したクライアントのUserAgentを表示してみると以下の様にクライアントのOSやヴァージョン、ブラウザの種類などが取得できています
Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1 Safari/605.1.15
def file_charset(request):
user_agent = request.META['HTTP_USER_AGENT']
if 'Windows' in user_agent:
response = HttpResponse(content_type='text/csv; charset=Shift-JIS')
else:
response = HttpResponse(content_type='text/csv;')
response['Content-Disposition'] = 'attachment; filename="{}"'.format(urllib.parse.quote(file_name))
df.to_csv(path_or_buf=response, sep=',', float_format='%.2f', index=True, decimal=",")
return response
user_agent = request.META['HTTP_USER_AGENT']
クライアントのUserAgentを取得します。if 'Windows' in user_agent:
クライアントのUserAgentがWindowsの場合にはcharsetをShift-JISに設定します。(デフォルトはUTF-8)response['Content-Disposition'] = 'attachment; filename="{}"'.format(urllib.parse.quote(file_name))
attachmentをつける事で表示せずにダウンロードが始まります。df.to_csv(path_or_buf=response, sep=',', float_format='%.2f', index=True, decimal=",")
CSVに書き出します。
群馬県でPythonを使ったAIやソフトウェアを開発している株式会社ファントムが運営しています。
メーリングリストに登録するとファントムの最新情報をお届けします
お客様のメールアドレスを共有することはありません
Comments