UnicodeEncodeError: ‘shift-jis’ codec can’t encode character ~~~~~
と出て、
sys.getdefaultencoding()をたたいてみたりしたけど、
特に問題はなさそうな場合
たいてい、原因はNLS_LANGにあります。
目次
NLS_LANGをJAPANESE_JAPAN.AL32UTF8にしてあげる
他のサイトでNLS_LANGをJAPANESE_JAPAN.JA16SJISTILDEにするといった記述があったのですが、
私の場合はうまいこと行かなかったです。
※追記
対象のORACLEのDBでselect value from nls_database_parametersをたたくと、
ご自身がどちらに設定すればいいのかが出てきます。
上手くいく人もいるかもしれないので、一応記載しておきます。
import cx_Oracle import os os.environ['NLS_LANG'] = 'JAPANESE_JAPAN.AL32UTF8' # ------略-------
PC自体の設定で変えてあげてもいいのかもしれないですが、
影響範囲が大きくなると面倒なので、
プログラム内で記述しております。
補足
OracleでSQLを流した時に日付形式についてもよくハマることがあるので、
そんな時はNLS_DATE_FORMATに日付の形式を追加してあげるとうまく動きます。
import os os.environ['NLS_DATE_FORMAT'] = "YYYY-MM-DD HH24:MI:SS"