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

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

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

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

UTF-8

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

文字コード

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

Q&A

2回答

366閲覧

python3 での複数文字コードへの対応について

py_te

総合スコア0

Python 3.x

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

UTF-8

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

文字コード

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

0グッド

0クリップ

投稿2023/01/17 08:55

前提

python3で各文字コード(utf-8,shift_jis,EUC-JPなどなど・・)の
処理に対応したアプリケーションを作成したいです。

python3 へ文字列は下記の例のように日本語をコマンドライン引数として渡しますが
コマンドライン引数の文字列を扱おうとすると、UnicodeDecodeError が発生します。
また、事前にどの文字コード(utfなのかshit_jisなのか)で渡されるかは分からない前提とさせてください。

(例)test.py テスト テスト2

ここに実現したいことを箇条書きで書いてください。

  • 各文字コードがコマンドライン引数として渡されても対応可能なアプリにする。

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

UnicodeDecodeError: '〇〇〇' codec can't decode byte 〇〇〇

該当のソースコード

ソースコード

試したこと

例えばpython3 のコードにshift_jisのコマンドライン引数を渡した時に
下記はutf-8 に変換され上手く処理することができましたが
この場合あらかじめ、コマンドライン引数の日本語がどの文字コードがわかっていなければならないので
下記で運用することは難しいと感じました。

args[1].encode('utf_8','surrogateescape').decode('shift_jis','surrogateescape')

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

python3 をlinux 上で動作させています。

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

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

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

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

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

guest

回答2

0

chardetというモジュールを使うと文字コードの判定ができます。
だだし、引数の文字列のような短いもので判定するのは確度が下ると思います。

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

別の方法として、変換してみてエラーになったら他のもので試すという方式です。数種類であれば、以外とこれが簡単だったりしますね。

投稿2023/01/17 09:09

TakaiY

総合スコア12774

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

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

0

Unix系なら環境変数(langとか)で指定しておいてね、といっておけば。
わざわざsjisで引数を渡してくるとかはよっぽど少数とは思いますけど。

投稿2023/01/17 11:29

matukeso

総合スコア1590

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問