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

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

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

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

Q&A

解決済

2回答

2181閲覧

Pythonの文字化け

takuwa1102

総合スコア13

Git

Gitはオープンソースの分散バージョン管理システム(DVCS)です。

文字コード

文字コードとは、文字や記号をコンピュータ上で使用するために用いられるバイト表現を指します。

Python

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

0グッド

0クリップ

投稿2019/04/11 16:08

前提・実現したいこと

最近、プログラミングを始めてみようと思いPythonをhttps://www.python.org/からDLしました。
試しに以下のよいなコードでテキストファイルを作成し、Git-bashでコンパイルしたところ日本語の部分が文字化けしてしまいました。このときbashのtextの設定はフォントをMSゴシック、文字サイズ8pt,Localeをja_JP、Character set UTF-8に設定していました。またbash上では日本語を打つことも可能でした。どこの設定を直したら文字化けが直るでしょうか。
OSはWindows10です。
回答よろしくお願いします。

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

Hello world Bye ▒▒▒▒ɂ▒▒▒

該当のソースコード

# coding: UTF-8 print("Hello world") print("Bye") print("こんにちは")

試したこと

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

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

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

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

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

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

guest

回答2

0

ベストアンサー

うまくいかない原因

先頭行にあるエンコード宣言(# coding: UTF-8)は「そのスクリプトファイルがどのようなエンコーディングで記述されているか」を指示するものなのですが、インタープリタが標準入出力として「どのエンコーディングを用いるか」を制御するものではありません。

またGit-Bashの端末設定でのロケールがらみの設定はあくまでUnixの流儀に従うコマンド群にのみ影響するものです。その流儀とはLANG等々の環境変数に応じて文字のエンコーディングが決まるというものです。Git-Bashで使えるls等のコマンドはこの流儀に従い動作しますが、質問者さんがインストールした「Windows用にビルドされたPython」はそうではありません。lsもpythonも元々Unix系OSで開発されたコマンドだと思いますが、なぜlsがUnix流儀でpythonがそうでないかというと、lsがUnix likeなCUI環境を提供することを主眼に設計されたGit-Bash専用のコマンドとして移植されたものであり、Pythonの方はWindowsの標準的なCUI環境であるコマンドプロンプトやPowserShell上で自然に動作するように設計されているからだと思います。CUIといってもGit-Bash(が用いているMinGW環境)とコマンドプロンプトでは仕様の差異があるわけです。

対処

Git-Bash上でpythonを動かす想定でもっとも手軽な方法は環境変数PYTHONIOENCODINGを設定することだと思います。

bash

1$ locale 2LANG=ja_JP.UTF-8 3LC_CTYPE="ja_JP.UTF-8" 4LC_NUMERIC="ja_JP.UTF-8" 5LC_TIME="ja_JP.UTF-8" 6LC_COLLATE="ja_JP.UTF-8" 7LC_MONETARY="ja_JP.UTF-8" 8LC_MESSAGES="ja_JP.UTF-8" 9LC_ALL= 10 11$ cat hello.py 12# coding: UTF-8 13print("Hello world") 14print("Bye") 15print("こんにちは") 16 17$ type python 18python is hashed (/c/Program Files/Python37/python) 19 20$ python hello.py # 文字化けする例 21Hello world 22Bye 23▒▒▒▒ɂ▒▒▒ 24 25$ # 文字化けしない例 26$ export PYTHONIOENCODING=utf8 # この環境変数を設定しておく 27 28$ python hello.py 29Hello world 30Bye 31こんにちは 32 33$ python hello.py 34Hello world 35Bye 36こんにちは 37 38$ unset PYTHONIOENCODING # 環境変数を消すと元のとおり文字化けする 39 40$ python hello.py 41Hello world 42Bye 43▒▒▒▒ɂ▒▒▒

毎回この環境変数の設定をするのは面倒なのでGit-Bash起動時に自動的に設定するようにしておくのもよいでしょう。それをするにはホームディレクトリー(デフォルトではWindowsのホームディレクトリーになっていると思います)に.profileというログインスクリプトファイルを作成しそこに

bash

1export PYTHONIOENCODING=utf8

の1行を書いておけばよいです。


Windowsで動作する色々なPython:

質問者さんがインストールしたのは「いわゆるWindows用の標準的なPython」でありコマンドプロンプトやPowserShell上で動かすときに最も自然と思われる動作をすると思います。実際、問題のプログラムをコマンドプロンプトからpython xxx.pyで動かしてみてください。文字化けせずに「こんにちは」と表示されると思います。

このPythonの実装はGit-BashやcygwinあるいはWindows Subsystem for Linux上でも「動くことは動く」のですがGit-BashやcygwinやWSL(上のUbuntu)で自然な動作となるような仕様にはなっていません。

Git-Bash、cygwin、WSLそれぞれ「その環境用のPythonのビルド」が存在します。そういったものをインストールして使うとそれぞれの環境で最も自然な仕様で動作する(例えば端末のロケール設定に従ってエンコーディングが決まってくれる)と思います。

投稿2019/04/11 23:17

KSwordOfHaste

総合スコア18392

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

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

takuwa1102

2019/04/12 00:47

ありがとうございます!今日中にやってみて報告します!
takuwa1102

2019/04/12 17:09

ありがとうございます!できました!
guest

0

ソースコード自体の文字コードはなにかを調べてみては。

投稿2019/04/11 16:33

y_waiwai

総合スコア87719

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

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

takuwa1102

2019/04/12 00:39

ソースコード自体の文字コードはUTF-8になってました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問