'ascii' codec can't encode characters in position -: ordinal not in range(128)
경우라면 난감하기 이를 데가 없겠다.
1. sample.rst
1 2 3 4 5 6 7 | .. mermaid:: A[Christmas] --> |Get money|B(Go shopping) B --> C{생각 좀 하고} C --> |One|D[Laptop] C --> |Two|E[iPhone] C --> |Three|F[Car] | cs |
위 코드는 Mermaid Live Editor 상에서 다음 그림과 같이 깔끔하게 표시됩니다.
2. make html
1 2 3 4 5 | preparing documents... done writing output... [100%] rest/Sample Encoding error:'ascii' codec can't encode characters in position 243-244: ordinal not in range(128) The full traceback has been saved in /tmp/sphinx-err-mRmF9N.log, if you want to report the issue to the developers. make: *** [html] Error 1 | cs |
하지만 sample.rst의 경우 UTF-8 encoding으로 잘 저장된 파일입니다.
호출 스택과 같이 디버깅해 보면 unicode 자료형인 code에 한글이 있는 경우
타입 예측이 실패해서 에러가 발생한 것으로 보인다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | Traceback (most recent call last): File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/cmdline.py", line 306, in main app.build(opts.force_all, filenames) File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/application.py", line 339, in build self.builder.build_update() File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 331, in build_update 'out of date' % len(to_build)) File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 397, in build self.write(docnames, list(updated_docnames), method) File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 434, in write self._write_serial(sorted(docnames)) File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/builders/__init__.py", line 443, in _write_serial self.write_doc(docname, doctree) File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/builders/html.py", line 555, in write_doc self.docwriter.write(doctree, destination) File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/docutils/writers/__init__.py", line 80, in write self.translate() File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinx/writers/html.py", line 56, in translate self.document.walkabout(visitor) File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/docutils/nodes.py", line 174, in walkabout if child.walkabout(visitor): File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/docutils/nodes.py", line 174, in walkabout if child.walkabout(visitor): File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/docutils/nodes.py", line 166, in walkabout visitor.dispatch_visit(self) File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/docutils/nodes.py", line 1882, in dispatch_visit return method(node) File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinxcontrib/mermaid.py", line 281, in html_visit_mermaid render_mm_html(self, node, node['code'], node['options']) File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinxcontrib/mermaid.py", line 245, in render_mm_html imgcls=None, alt=None) File "/home/ships/VirtualEnvironments/Sphinx/lib/python2.7/site-packages/sphinxcontrib/mermaid.py", line 235, in _render_mm_html_raw self.body.append(tag_template.format(align=node.get('align'), code=self.encode(code))) UnicodeEncodeError: 'ascii' codec can't encode characters in position 243-244: ordinal not in range(128) | cs |
3. sys.setdefaultencoding
1 2 3 | import sys reload(sys) sys.setdefaultencoding('UTF-8') | cs |
이렇게 코드에 삽입해도 되지만 다음과 같이 가상 환경의 기본 인코딩을 변경하자.
VirtualEnvironment/Sphinx/lib64/python2.7/ 경로에 sitecustomize.py 파일을 생성 후
다음 내용을 입력 후 저장한다.
1 2 3 4 | # -*- coding: UTF-8 -*- import sys sys.setdefaultencoding('UTF-8') | cs |
3. 결론
결국 언젠가는 Python 2.X 버전을 대체해야 한다.
댓글 없음:
댓글 쓰기