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

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

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

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

825閲覧

Pythonの文字コードについて UnicodeDecodeError

Fukada

総合スコア13

CUDA

CUDAは並列計算プラットフォームであり、Nvidia GPU(Graphics Processing Units)向けのプログラミングモデルです。CUDAは様々なプログラミング言語、ライブラリ、APIを通してNvidiaにインターフェイスを提供します。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

UTF-8

UTF-8は8ビット符号単位の文字符号化形式及び文字符号化スキームです。データ交換方式、ファイル形式としては、一般的にUTF-8が使われる傾向があります。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/04/14 05:17

編集2020/04/17 12:58

Pythonの文字コードについて UnicodeDecodeError

現在、以下の環境にてpythonを使用しています。

  • Ubuntu18.04
  • python 3.6.9
  • nvidia docker
  • cuda:10.1-cudnn7-devel-ubuntu18.04
  • jupyter notebook

そこで、jsonファイルをロードしようとしたところ、以下のようなエラーが出力されました。

UnicodeDecodeError Traceback (most recent call last) <ipython-input-6-9b06f010e639> in <module> 4 for train_annotations_file in train_annotations_files: 5 with open(os.path.join(_train_annotations_path, train_annotations_file)) as f: ----> 6 annotation = json.load(f) 7 labels = annotation["labels"] 8 per_image.append(len(labels)) /usr/lib/python3.6/json/__init__.py in load(fp, cls, object_hook, parse_float, parse_int, parse_constant, object_pairs_hook, **kw) 294 295 """ --> 296 return loads(fp.read(), 297 cls=cls, object_hook=object_hook, 298 parse_float=parse_float, parse_int=parse_int, /usr/lib/python3.6/encodings/ascii.py in decode(self, input, final) 24 class IncrementalDecoder(codecs.IncrementalDecoder): 25 def decode(self, input, final=False): ---> 26 return codecs.ascii_decode(input, self.errors)[0] 27 28 class StreamWriter(Codec,codecs.StreamWriter): UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 17: ordinal not in range(128)

様々なサイトを参考にして、デフォルトの文字コードをutf-8にしたのですが、エラーが治りません。

しかし、sys.getdefaultencoding()と入力すると'utf-8'というふうに出力されます。
どなたかご教授頂けませんか。


*追記
シェルでlocaleコマンドを実行した結果

LANG= LANGUAGE= LC_CTYPE="POSIX" LC_NUMERIC="POSIX" LC_TIME="POSIX" LC_COLLATE="POSIX" LC_MONETARY="POSIX" LC_MESSAGES="POSIX" LC_PAPER="POSIX" LC_NAME="POSIX" LC_ADDRESS="POSIX" LC_TELEPHONE="POSIX" LC_MEASUREMENT="POSIX" LC_IDENTIFICATION="POSIX" LC_ALL=

*解決先
localeコマンドの出力のLANGUAGEが空になっているので言語設定をするために以下のコマンドを入力した

apt install language-pack-ja-base language-pack-ja ibus-mozc echo 'export LANG=ja_JP.UTF-8' >> ~/.bashrc echo 'export LANGUAGE="ja_JP:ja"' >> ~/.bashrc

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

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

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

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

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

quickquip

2020/04/14 05:48

シェルで locale コマンドを実行すると結果はどうなりますか
Fukada

2020/04/14 05:56

ただいま更新いたしました。
Fukada

2020/04/14 06:26

locale utf8と調べたら無事解決いたしました! ありがとうございます!!
guest

回答1

0

ベストアンサー

デフォルトの文字コードというより、以下のopen()の引数でエンコードを指定してみるとか。
with open(os.path.join(_train_annotations_path, train_annotations_file), encoding='utf-8') as f:

encoding='???'
の部分は'utf-8'など対象となるファイルのエンコードを指定します。

投稿2020/04/14 05:51

autumn_nsn

総合スコア335

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

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

Fukada

2020/04/14 05:58

ご回答有り難うございます。 encoding='utf-8'を追加したら無事エラーがなくなりました。 デフォルトでutf8にするのは諦めたほうがいいのでしょうか
autumn_nsn

2020/04/14 07:46

最近では使用している環境により、読み込むファイルのエンコードが多岐に渡っているので、 私は個人的にはencodingオプションを常に使用しています。 参考になれば幸いです。
Fukada

2020/04/17 12:55

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問