Created on 2016-08-18
Python2.7とTkinterで書かれたアプリケーションが、絵文字を表示するとこんなエラーを投げていることに気がついた。
TclError: character U+1f604 is above the range (U+0000-U+FFFF) allowed by Tcl
これ、アプリケーションの問題ではなく、CPythonとtk/tclのコンパイルオプションの問題。
該当するコードなどを見たところ、CFLAGS=-DTCL_UTF_MAX=6
と--enable-unicode=ucs4
を指定してCPython,
tcl, tkをリビルドすれば表示できます。
自分の環境だと、このような手順でコンパイルしたら動いた。😄
# build.sh
export CFLAGS=-DTCL_UTF_MAX=6
export MAKEFLAGS=-j5
tar xf tcl8.6.6-src.tar.gz
tar xf tk8.6.6-src.tar.gz
git clone https://github.com/python/cpython
cd tcl8.6.6/unix
./configure --enable-threads --enable-shared --enable-symbols --enable-64bit --enable-langinfo --enable-man-symlinks
make
sudo checkinstall
cd ../..
cd tk8.6.6/unix
./configure --enable-threads --enable-shared --enable-symbols --enable-64bit --enable-man-symlinks
make
sudo checkinstall
cd ../..
cd cpython
git checkout -b 2.7 remotes/origin/2.7
./configure --enable-shared --enable-optimizations --enable-ipv6 --enable-unicode=ucs4 --with-lto --with-signal-module --with-pth --with-wctype-functions --with-tcltk-includes=/usr/local/include/ --with-tcltk-libs=/usr/local/lib/
make
sudo checkinstall