質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

Q&A

解決済

1回答

2800閲覧

PythonでAWS S3に、SJISでCSVを配置して、Excelで文字化けしないようにしたい

MOGU

総合スコア4

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Amazon S3

Amazon S3 (Simple Storage Service)とはアマゾン・ウェブ・サービスが提供するオンラインストレージサービスです。

0グッド

0クリップ

投稿2022/11/25 05:06

前提

PythonでAWS S3にCSVを配置するようなシステムをlambdaで作成してます。
そのCSVがExcelですぐ見れるように、文字コードをSJISにしたいです。
何を試しても、S3からダウンロードしてExcelで開くと文字化けします。
どうしたら文字化けせずにCSVを配置することが可能でしょうか。

分かる方がいらっしゃいましたらご回答よろしくお願いいたします。

実現したいこと

AWS S3に配置したCSVをExcelで文字化けせずにすぐ見れるようにしたい。
※サクラエディタなどで開けば文字化けはしないのですが、ITに疎い方が使用するため、Excelで開くことが必須です

発生している問題・エラーメッセージ

Excelで開くと、CSVの中身が 豕ィ譁 のように文字化けしてしまう

該当のソースコード

Python

1csv = "AAA, BBB, CCC" 2csv = csv + str('\n') 3csv = csv + "AAAの中身"+ ',' 4csv = csv + "BBBの中身"+ ',' 5csv = csv + "CCCの中身" 6 7s3 = boto3.resource('s3') 8bucket = s3.Bucket(output_bucket) 9output_key = 'test.csv' 10bucket.put_object( Body=str(csv), Key=output_key, ContentType='text/csv' ) 11

試したこと### ヘディングのテキスト

① ContentType を ContentType='text/csv; charset=shift-jis' に変更して試しましたが変化がありませんでした。
② ContentType を ContentType='charset=shift-jis' に変更して試しましたが、S3へのアップはCSVという名前でできるのですが、ダウンロードしたとき強制的に.csvではなく.txtに変更されてしまいました。
③ csv = csv.encode('shift_jis') でshift_jisに直してアップを試しましたが、b'\x92\x8d\x95\xb... などの文字列のままCSVファイルになってしまい、読むことができませんでした。

補足情報(FW/ツールのバージョンなど)

Python3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

③ csv = csv.encode('shift_jis') でshift_jisに直してアップを試しましたが、b'\x92\x8d\x95\xb... などの文字列のままCSVファイルになってしまい、読むことができませんでした。

上記を見落としてました。すでに試されていましたね。

追記前の回答

S3触ったことなく動作未検証ですがput_object(**kwargs)

Body (bytes or seekable file-like object) -- Object data.

とあるので

Body=str(csv)のかわりにBody=csv.encode('cp932')と明示的にエンコーディングしたバイトデータを渡すとよいかもしれません。

投稿2022/11/25 05:56

編集2022/11/25 06:09
can110

総合スコア38267

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MOGU

2022/11/25 06:12

Body=csv.encode('cp932') で無事Excelで開くことができました。  csv.encodeは試していたのですが、Bodyの前で行っており、Bodyのstr(csv)が邪魔をしていたようです。 put_objectでやれば大丈夫でした。 ありがとうございました! 
can110

2022/11/25 06:15 編集

> csv.encodeは試していたのですが、Bodyの前で行っており、Bodyのstr(csv)が邪魔をしていたようです。 なるほど。試したことでうまくいくはずで、ちょっと腑に落ちなかったですが納得しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問