Python QRコードを読み取の際と出力したCSVファイルが文字化けした際の対処方法【Windows】

環境
windows10 64bit 1803
Anaconda3
Python 3.7
Pycharm2019.3

QRコードの読み取り

PythonでQRコードを読み取る際手間取ったので備忘録です。

ここでは、Pythonで作成したQRコードの読み込みを記載しています

pyzbar を インストールする

Pycharmのターミナルから pyzbar をインストールします。

Anaconda3を使用されている方はこれだけで大丈夫のはず。

pip install pyzbar

インストールしないと以下のようにエラーが出力されます。

from pyzbar.pyzbar import decode ModuleNotFoundError: No module nomed 'pyzbar'

とエラーが出力され『pyzbar.pyzbarインポートからModuleNotFoundErrorをデコード:「pyzbar」と名付けられたモジュールはありません。』と怒られてしまいます。

ちなみに私は、pyzbarをインストールしたにも関わらず以下の画像のようにエラーが出力されてしまいました。

なので、もう一度pyzbarをインストールし、pirllowもインストールしました。

pillowをインストールする

Anaconda3には、以下の画像のように始めからパッケージとしてインストール済です。
ので、インストールしても『インストール済』と表示されます。

pip install pillow

インポートするのは、pillow でなく PIL

画像ファイルの読み込み。インストールするにはPillowですが、インポートするパッケージの名前はPillowではなくPILなので注意しましょう。

pillow公式に説明があります。

from pyzbar.pyzbar import decode
from PIL import Image

image = 'qr_code.png' # 画像ファイルの指定
data = decode(Image.open(image)) # QRコードの読取り
output = data[0][0].decode('utf-8', 'ignore')
print(output)

でもこのまま出力しても

文字化けしてしまいます。

文字化けの対処方法

当初、コーディングに以下を記述していたのですが、これでは文字化けしたままで、調べてみるとEmacsユーザー併用のコーディング方法のようでした。

# -*- coding: utf-8 -*-

とりあえず、次に 試したのは、以下の記述を1行目に記述すると文字化けが解消されました。

# coding: UTF-8

参考サイト:Python で文頭に記載する文字コードの「アレ」の名称(なんちゃら UTF-8 みたいなやつ

windowsの文字コードを調べてみる

Windowsでは主に Shift-JIS で設定とのことで調べてみた結果ターミナルから調べてみました。

現在の文字コードを調べるには、ターミナル から chcp と入力します。

(base) C:\Users\chiraura\PycharmProjects\Python_test>chcp
現在のコード ページ: 932

(base) C:\Users\chiraura\PycharmProjects\Python_test>

932と表示されたので Windows-31J (MS932) です。

参考サイト:Shift_JIS と Windows-31J (MS932) の違い

65001と表示されたらutf-8です。

Windowsの文字コードはShift-JISではなくWindows-31J

MacやLinuxはUTF-8

Pythonを調べてみるとutf-8 でした。

chardet 3.0.4:https://pypi.org/project/chardet/

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
>>>

参考サイト:Pythonシステムパラメータと関数

CSVファイルを開くとエラーが表示された際の対処方法

QRコードからCSVに出力したファイルを開くとまたもや文字化けしていました。

Pythonで作成したQRコードをcsvに書き込んだ際以下のように文字化けし、ファイルが間違ったエンコーディングでロードされたらしい。

File was loaded in the wrong encoding:’UTF-8′
と表示されました。

なので色々試してみた結果・・

Reload in ‘windows-31j’ 「windows-31j」でリロード
Set project encoding to ‘windows-31j’ プロジェクトのエンコーディングを「windows-31j」に設定します
Reload in another encoding 別のエンコーディングでリロードする

windows-31jでリロードすることで無事表示されました。

ちなみに、UTF-8をロードしてもNG(文字化け)でした💦

しかし、メモ帳で作成したファイル(utf-8)をパイチャームで開くとそれはOK

なので、よくわからないが、Pycharmで保存したファイルの読み込みには文字変換して読み取ればOKのはず。

その他参考サイト

プロンプトやバッチファイル処理で使用されるコードページ(文字コード)を変更するコマンドです。Windows 10 以降ではバッチファイルを UTF-8 で使用したい場合などに役に立ちます。
Python 2 に比べるとずっと楽になったものの、環境によっては Python 3 で予期せぬ UnicodeError に遭遇することがあります。 Python 3.6 時点での、 Python…
Python のスクリプトが記述されたファイルは、現在のバージョンでは文字コードが UTF-8 で記述されているものとして処理されるため、別の文字コードで記述している場合はなんの文字コードを使用しているのか設定が必要となります。ここではプログラムを保存するファイルで使用する文字コードを設定する方法について解説します。
Pythonで文字コードの自動判定ができないか調べて、できたのでメモchardet というパッケージを利用すれば簡単にできました。Usage — chardet 2.3.0 documentat…
Pythonライブラリのchardetを使用し、文字コードを判別してテキストファイルを開いてみます

スポンサーリンク
スポンサーリンク
SNSフォローボタン

フォローする

シェアする

  • このエントリーをはてなブックマークに追加
スポンサーリンク
スポンサーリンク