0
0

More than 3 years have passed since last update.

UnicodeEncodeError: 'ascii' codec can't encode characters in position 5-12: ordinal not in range(128)が出る場合

Posted at

1 問題点

Python3にて、データをcsvに書き込み実施時にエラーが発生する。

test.py(関係あるコードのみを掲載)

def db_dump(c):
    sql_com='SELECT * FROM STOCK_INFO ORDER BY STOCK_NUM ASC'
    tmp=c.execute(sql_com)   
    with open(setting.CSV_DB_PATH,'w') as f:
        writer=csv.writer(f)
        writer.writerows(tmp)

上記のコードを使い、データをcsvファイルに書き込みを行う時にエラーが発生する。

root@2a1627805ea9:/home/stock# python3 sqltest.py 9
7
Traceback (most recent call last):
  File "sqltest.py", line 105, in <module>
    db_dump(cur)
  File "sqltest.py", line 56, in db_dump
    writer.writerows(tmp)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 5-12: ordinal not in range(128)

デフォルトではasciiでエンコードされるが、扱っている文字列はasciiでは扱えないためエラーが発生しています。自分の環境では、扱っている文字はutf-8で扱えるようです。

2 解決策

csvファイルをオープンするときに、encoding='utf-8'を記載することで、扱う文字コードをutf-8に指定できます。

with open(setting.CSV_DB_PATH,'w',encoding='utf-8') as f:

test.py(修正版)

def db_dump(c):
    sql_com='SELECT * FROM STOCK_INFO ORDER BY STOCK_NUM ASC'
    tmp=c.execute(sql_com)   
    with open(setting.CSV_DB_PATH,'w',encoding='utf-8') as f:
        writer=csv.writer(f)
        writer.writerows(tmp)

上記を実施すると無事にcsvファイルにデータを書き込むことができました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0