MkDocsのUnicodeDecodeErrorを解消する
Mac(10.11.6)でMkDocsを起動後、ファイルを保存するとエラーが発生する。
[E 170626 17:20:09 ioloop:638] Exception in callback <bound method type.poll_tasks of <class 'livereload.handlers.LiveReloadHandler'>>
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/tornado/ioloop.py", line 1026, in _run
return self.callback()
File "/usr/local/lib/python2.7/site-packages/livereload/handlers.py", line 67, in poll_tasks
filepath, delay = cls.watcher.examine()
File "/usr/local/lib/python2.7/site-packages/livereload/watcher.py", line 73, in examine
func and func()
File "/usr/local/lib/python2.7/site-packages/mkdocs/commands/serve.py", line 106, in builder
build(config, live_server=live_server, dirty=dirty)
File "/usr/local/lib/python2.7/site-packages/mkdocs/commands/build.py", line 352, in build
utils.clean_directory(config['site_dir'])
File "/usr/local/lib/python2.7/site-packages/mkdocs/utils/__init__.py", line 134, in clean_directory
if entry.startswith('.'):
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)
確認
ascii
でデコードしようとして発生しているエラーのようなのでUTF-8
を扱うように修正するが、まずはascii
を使っているか確認。
$ python
Python 2.7.13 (default, Dec 17 2016, 23:03:43)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.getdefaultencoding()
ascii
ascii
を使っていることが明確になったので、UTF-8
をデフォルトにするように修正する。
UTF-8をデフォルトにする
まずはpythonが扱っているライブラリパスを調べる。
$ python
Python 2.7.13 (default, Dec 17 2016, 23:03:43)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/usr/local/lib/python2.7/site-packages/pyserial-3.2.1-py2.7.egg', ...]
/usr/local/lib/python2.7/site-packages
を見ればよさそう。
ここでsitecustomize.py
を修正する。
import.sys
の直下にsys.setdefaultencoding('utf-8')
を追記。
--- sitecustomize.py.org 2017-06-26 17:36:14.000000000 +0900
+++ sitecustomize.py 2017-06-26 17:26:44.000000000 +0900
@@ -4,6 +4,7 @@
import re
import os
import sys
+sys.setdefaultencoding('utf-8')
if sys.version_info[0] != 2:
# This can only happen if the user has set the PYTHONPATH for 3.x and run Python 2.x or vice versa.
解決!
ファイルを保存してもエラーが出なくなった。
mkdocs serve --livereload
と実行しておくと修正がすぐに反映されるのでとても快適。